大整数加法
求两个不超过 200200 位的非负整数的和。
输入格式
有两行,每行是一个不超过 200200 位的非负整数,可能有多余的前导 00。
输出格式
一行,即相加后的结果。结果里不能有多余的前导 00,即如果结果是 342342,那么就不能输出为 03420342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
代码:
#include<iostream> #include<string.h> using namespace std; int main(){
char a[203],b[203]; cin>>a>>b; //设置结果的最大位数 int lenmax; if(strlen(a)>strlen(b)){ lenmax = strlen(a)+2; }else { lenmax = strlen(b)+2; } char *c= new char[lenmax]; int i =strlen(a)-1; int j =strlen(b)-1; int k=0,up=0,x,y; while (i>=0||j>=0) { if (i<0) x = 0; else x = a[i]-'0'; if (j<0) y = 0; else y = b[j]-'0'; int z =x+y+up; if (z>9) { z= z%10; up=1; }else { up=0; } c[k++]=z+'0'; i--; j--; } k--; //加完之后发现还有进位 if (up>0) { c[++k]='1'; } //可能存在a 和 b 出现00011这种情况,故需要剃掉0开始的 for (i = k; i >=0; i--) { if(c[i]!='0'){ k=i; break; } } // 输出结果 for(int i=k;i>=0;i--){ cout<<c[i]; } cout<<endl; }