#include<iostream>
#include<string.h>
const int N=1000;
using namespace std;
typedef struct DATA{
int num[1000];
int len;
}DATA;
//翻转大数
DATA turnstr(DATA &data)
{
int t;
int midlen=data.len/2;
int lastnum=data.len-1;
for(int i=0;i<midlen;i++)
{
t=data.num[i];
data.num[i]=data.num[lastnum];
data.num[lastnum]=t;
lastnum--;
}
return data;
}
//将输入的char型大数数组 转化 为int型大数数组
DATA chartoint(char *str,DATA &data)
{
memset(data.num, 0, sizeof(data.num));//要把大于data.len的那些位置0。。
data.len=strlen(str);
for(int i=0;i<data.len;i++)
data.num[i]=(int)str[i]-'0';
return data;
}
//输出大数
void output(DATA data)
{
for(int i=0;i<data.len;i++)
cout<<data.num[i];
cout<<endl;
}
//加法
DATA plus(DATA &data1,DATA &data2,DATA &data)
{
int maxlen=(data1.len>=data2.len)?data1.len:data2.len;
data.len=maxlen;
int add=0;
for(int i=0;i<maxlen;i++)
{
//如果前边不置0,当长度不同时这里就会有问题。
//例如1+10, 会变成x1+10, 其中x是个随机数, 所以出来的答案就错了。。
data.num[i]=(data1.num[i]+data2.num[i]+add) %10;
if(data1.num[i]+data2.num[i]+add >=10)
add=1;
else add=0;
}
if (add==1) //加完最后一位还要进位的情况
{
data.len++;
data.num[data.len-1]=1;
}
return data;
}
int main()
{
char str1[N];
char str2[N];
DATA data1;
DATA data2;
DATA data;
cout<<"请输入两个大数:"<<endl;
gets(str1);
gets(str2);
output(turnstr( plus(turnstr(chartoint(str1,data1)), turnstr(chartoint(str2,data2)) ,data)));
return 0;
}
目前还没有评论