#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; }