代码要自己打欧,在最艰难的时候我来帮助你
题目描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222 33333333333333333333
样例输出
55555555555555555555 #include <bits/stdc++.h> using namespace std; char a1[202]={0},a2[202]={0}; int main() { cin>>a1>>a2; int a3[203]={0},t,x=0,y=0,z=0; int n1=strlen(a1),n2=strlen(a2); while(a1[x]&&a1[x+1]){ if(a1[x]==48){ x++; } else{ break; } } while(a2[y]&&a2[y+1]){ if(a2[y]==48){ y++; } else{ break; } } for(int i=x,k=0,m=(n1-x+1)/2+x;i<m;i++){ t=a1[i],a1[i]=a1[n1-1-k],a1[n1-1-k++]=t; } for(int j=y,k=0,m=(n2-y+1)/2+y;j<m;j++){ t=a2[j],a2[j]=a2[n2-1-k],a2[n2-1-k++]=t; } n1-=x; n2-=y; if(n1<n2){ n1=n2; } for(int k=0;k<n1;x++,y++,k++){ a3[k]=(a1[x]?a1[x]-48:0)+(a2[y]?a2[y]-48:0)+z; if(a3[k]>=10){ z=1,a3[k]-=10; } else{ z=0; } } if(z){ a3[n1++]++; } for(int i=n1-1;i>=0;i--){ cout<<a3[i]; } return 0; } //1025