题目描述 Description
给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A+B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
15
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
分析:和减法一样,去掉了两个数的大小比较,发现没必要,还有发现不用判断cc大于10么, 直接cc%=10;
代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 char a[501],b[501]; 8 int c[502]; 9 int main() 10 { 11 cin>>a>>b; 12 memset(c,0,sizeof(c)); 13 int alen=strlen(a); 14 int blen=strlen(b); 15 int i=alen-1,j=blen-1,k=0; 16 int carry=0; 17 while(i>=0&&j>=0) 18 { 19 int cc=(a[i--]-'0')+(b[j--]-'0')+carry; 20 carry=cc/10; 21 cc%=10; 22 c[k++]=cc; 23 } 24 while(i>=0) 25 { 26 int cc=(a[i--]-'0')+carry; 27 carry=cc/10; 28 cc%=10; 29 c[k++]=cc; 30 } 31 while(j>=0) 32 { 33 int cc=(b[j--]-'0')+carry; 34 carry=cc/10; 35 cc%=10; 36 c[k++]=cc; 37 } 38 if(carry!=0)c[k++]=carry;//最后判断进位是不是为0不是要进一位 避免23+99=22; 39 int last=k; 40 for(int l=k; l>=0; l--)//找开头不是0的那个起点 41 if(c[l]!=0) 42 { 43 last=l; 44 break; 45 } 46 for(int l=last; l>=0; l--)printf("%d",c[l]); 47 printf(" "); 48 return 0; 49 }