问题 B: 【高精度】简单高精度加法
时间限制: 1 Sec 内存限制: 64 MB 提交: 77 解决: 25 [提交][状态][讨论版]题目描述
修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A、B的和,其中A和B的位数在5000位以内。
输入
共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在5000以内。
输出
输出一个非负数,即两数之和。
样例输入
1111111111
2222222222
样例输出
3333333333
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 using namespace std; 5 char a[5555],b[5555]; 6 int tag=0,c[5555]; 7 int na,nb,cut; 8 int i,j; 9 int main() 10 { 11 while(cin>>a>>b){ 12 tag=0; 13 na=strlen(a)-1; 14 nb=strlen(b)-1; 15 cut=max(na,nb); 16 for(i=na,j=nb;i>=0&&j>=0;i--,j--){ 17 tag=(a[i]-'0')+(b[j]-'0')+tag; 18 if(i==0&&j==0){ 19 c[cut--]=tag; 20 } 21 if(tag>=10){ 22 c[cut--]=tag%10; 23 tag=1; 24 } 25 else{ 26 c[cut--]=tag; 27 tag=0; 28 } 29 } 30 while(i>=0){ 31 tag=(a[i]-'0')+tag; 32 if(i==0){ 33 c[cut--]=tag; 34 } 35 if(tag>=10){ 36 c[cut--]=tag%10; 37 tag=1; 38 } 39 else{ 40 c[cut--]=tag; 41 tag=0; 42 } 43 i--; 44 } 45 while(j>=0){ 46 tag=(b[j]-'0')+tag; 47 if(j==0){ 48 c[cut--]=tag; 49 } 50 if(tag>=10){ 51 c[cut--]=tag%10; 52 tag=1; 53 } 54 else{ 55 c[cut--]=tag; 56 tag=0; 57 } 58 j--; 59 } 60 cut=max(na,nb); 61 for(i=0;i<=cut;i++){ 62 cout<<c[i]; 63 } 64 cout<<endl; 65 memset(a,0,sizeof(a)); 66 memset(b,0,sizeof(b)); 67 memset(c,0,sizeof(b)); 68 } 69 return 0; 70 }