一道数据结构内顺序表的题
已知A、B分别是m、n位(位数为小于30的随机正整数)的随机正整数,编写程序给出这两个正整数相加的结果。如:A=47858628539074,B= 212821064467,C=A+B=48071449603541
输入m和n,随机生成m位和n位数,运行结果如下:
代码:
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
#define MAXLEN (int)100
struct LinkList
{
int data[MAXLEN];
int length;
};
void initList(LinkList &ls)
{
ls.length = 0;
}
void push(LinkList &ls,int e)
{
ls.data[ls.length] = e;
ls.length++;
}
int empty(LinkList ls)
{
if(ls.length > 0)
return 0;
else
return 1;
}
int gettop(LinkList &ls)
{
ls.length--;
return ls.data[ls.length];
}
//逆序
void reverse(LinkList &ls)
{
int i=0,j=ls.length-1;
while(i<j)
{
int t = ls.data[i];
ls.data[i] = ls.data[j];
ls.data[j] = t;
i++;
j--;
}
}
//显示
void print(LinkList ls)
{
for(int i = 0;i<ls.length;i++)
{
cout << ls.data[i] ;
}
}
int main()
{
LinkList la,lb,lc;
srand(time(NULL));
initList(la);
initList(lb);
initList(lc); //lc保存计算结果
int m,n;
cin >> m>>n;
//生成a
for(int i = 0;i<m;i++)
{
int d = rand()%10; //生成0到9的数
if(i==0 && d==0)
i--; //重新生成
else
push(la,d);
}
//生成b
for(int i = 0;i<n;i++)
{
int d = rand()%10; //生成0到9的数
if(i==0 && d==0)
i--; //重新生成
else
push(lb,d);
}
print(la);
cout <<"+";
print(lb);
cout <<"=";
//计算
int shift = 0;
while( (!empty(la)) &&(!empty(lb)) )
{
int sum = gettop(la) + gettop(lb) + shift;
if(sum >=10)
{
shift = 1;
sum -= 10;
}else
{
shift = 0;
}
push(lc,sum);
}
//
while(!empty(la))
{
int sum = gettop(la) + shift;
if(sum >=10)
{
sum -= 10;
shift = 1;
}else
{
shift = 0;
}
push(lc,sum);
}
//
while(!empty(lb))
{
int sum = gettop(lb) + shift;
if(sum >=10)
{
sum -= 10;
shift = 1;
}else
{
shift = 0;
}
push(lc,sum);
}
if(shift !=0)
push(lc,shift);
reverse(lc);
print(lc);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!