给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。
读入两个用空格隔开的正整数
输出A+B的值
3 12
15
两个正整数的位数不超过500位
下面三种方法有细微的差别:
第一种方法:顺序读入字符串:#include <iostream> #include <string> #include <sstream> #include <cstring> using namespace std; int main() { char a[501],b[501],c[502]; memset(a, '0', sizeof(a)); memset(b, '0', sizeof(b)); memset(c, '0', sizeof(c)); cin >> a >> b; int aLen = 0; int bLen = 0; for(int k=0; k<501; k++) { if(a[k]=='\0') { aLen = k; break; } } for(int k=0; k<501; k++) { if(b[k]=='\0') { bLen = k; break; } } int i=aLen-1, j=bLen-1, k=501; int carry = 0; while(i>=0 && j>=0) { int cc = (a[i]-'0')+(b[j]-'0')+carry; carry = cc/10; cc%=10; c[k] = cc+'0'; i--; j--; k--; } while(i>=0) { int cc = (a[i]-'0')+carry; carry = cc/10; cc%=10; c[k] = cc+'0'; i--; k--; } while(j>=0) { int cc = (b[j]-'0')+carry; carry = cc/10; cc%=10; c[k] = cc+'0'; j--; k--; } if(carry > 0) c[k] = carry; for(j=0; j<502; j++) if(c[j]-'0' > 0) break; for(; j<502; j++) cout << c[j]; }
第二种方法:逆序字符串:
#include <iostream> #include <cstring> using namespace std; int main() { char x[555],y[555]; int a[555]={0},b[555]={0},c[555]={0}; cin >> x >> y; int len_x = strlen(x); int len_y = strlen(y); for(int k=0; k<len_x; k++) { a[k]=x[len_x-1-k]-'0'; } for(int k=0; k<len_y; k++) { b[k]=y[len_y-1-k]-'0'; } int len_max = len_x>len_y?len_x:len_y; int carry = 0; for(int i=0; i<len_max; i++) { c[i]=(a[i]+b[i]+carry)%10; carry=(a[i]+b[i]+carry)/10; } if(carry > 0) c[len_max] = carry; if(c[len_max]==1) cout << 1; for(int i=len_max-1; i>=0; i--) cout << c[i]; return 0; }
第三种方法:进位操作分离:
#include <iostream> #include <cstring> using namespace std; int main() { char x[555],y[555]; int a[555]={0},b[555]={0},c[555]={0}; cin >> x >> y; int len_x = strlen(x); int len_y = strlen(y); for(int k=0; k<len_x; k++) { a[k]=x[len_x-1-k]-'0'; } for(int k=0; k<len_y; k++) { b[k]=y[len_y-1-k]-'0'; } int len_max = len_x>len_y?len_x:len_y; for(int i=0; i<len_max; i++) { c[i]=a[i]+b[i]; } for(int i=0; i<len_max; i++) { if(c[i]>=10) { c[i+1]++; c[i] -= 10; } } if(c[len_max]==1) cout << 1; for(int i=len_max-1; i>=0; i--) cout << c[i]; return 0; }