首页 > 代码库 > wiki oi 3116 高精度练习之加法

wiki oi 3116 高精度练习之加法

题目描述 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("\n");48     return 0;49 }

 

wiki oi 3116 高精度练习之加法