3116 高精度练习之加法
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题目描述 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位
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 6 using namespace std; 7 const int N=100001; 8 9 char aa[N]; 10 char bb[N]; 11 int a[N]; 12 int b[N]; 13 int c[N]; 14 15 int main() 16 { 17 scanf("%s%s",aa,bb); 18 int la=strlen(aa); 19 int lb=strlen(bb); 20 if(la<lb||(la==lb&&strcmp(aa,bb)<0)) 21 { 22 swap(la,lb); 23 swap(aa,bb); 24 cout<<"-"; 25 } 26 for(int i=0;i<la;i++) 27 a[i+1]=aa[la-i-1]-'0'; 28 for(int i=0;i<lb;i++) 29 b[i+1]=bb[lb-i-1]-'0'; 30 for(int i=1;i<=max(la,lb);i++) 31 c[i]=a[i]-b[i]; 32 for(int i=1;i<=max(la,lb);i++) 33 if(c[i]<0) 34 c[i]+=10,c[i+1]--; 35 int j=max(la,lb); 36 while(!c[j]&&j>1) j--; 37 for(int i=j;i>=1;i--) 38 cout<<c[i]; 39 } 40 /* 41 123456 42 456 43 */