#include<iostream> #include<string> #define max 1000 using namespace std; int min(int a,int b) { if(a>b)return b; else return a; } int main() { char a[max],b[max]; int Ia[max],Ib[max],n,i,j,k,lena,lenb,z; cin>>n; for(i=0;i<n;i++) { k=0; z=0; cin>>a>>b; lena=strlen(a); lenb=strlen(b); cout<<"Case "<<i+1<<":"<<endl; for(j=0;j<lena;j++)cout<<a[j]; cout<<" "; for(j=0;j<lena;j++)Ia[j]=a[lena-j-1]-48;//转换为整型数组 例如:input: 1234 转换为:4321这样就从个位数开始相加 cout<<"+"<<" "; for(j=0;j<lenb;j++)cout<<b[j]; cout<<" "; for(j=0;j<lenb;j++)Ib[j]=b[lenb-j-1]-48; cout<<"="<<" "; for(j=0;j<min(lena,lenb);j++) if(Ia[j]+Ib[j]+k>=10)//k为是否进位的标记 { Ia[j]=(Ia[j]+Ib[j]+k)-10; k=1; } else { Ia[j]=Ia[j]+Ib[j]+k; k=0; } if(lena==min(lena,lenb)&&lena!=lenb)//Ib还有数,而Ia中已经没有数,此时只要再处理Ib中剩余的元素 { for(j=lena;j<lenb;j++) if(Ib[j]+k>=10) { Ib[j]=Ib[j]+k-10; k=1; } else { Ib[j]=Ib[j]+k; k=0; } if(k==1)cout<<k;//做完了Ib中剩余的元素,K还是为1,则说明还有进位直接输出 while(lenb-z-1>=lena)//将Ib中刚刚处理的剩余元素反向输出 { cout<<Ib[lenb-z-1]; z++; } } if(lenb==min(lena,lenb)&&lena!=lenb) { for(j=lenb;j<lena;j++) if(Ia[j]+k>=10) { Ia[j]=Ia[j]+k-10; k=1; } else { Ia[j]=Ia[j]+k; k=0; } if(k==1)cout<<k; } if(k==1&&lena==lenb)cout<<k; for(j=lena-1;j>=0;j--) { cout<<Ia[j]; if(j==0&&i<n-1){cout<<endl;cout<<endl;} } if(i==n-1)cout<<endl; } return 0; }
1002 ( A + B Problem II )
最新推荐文章于 2022-01-03 21:35:52 发布
本文介绍了一个使用 C++ 实现的字符串加法程序,该程序能够处理任意长度的大整数相加,并通过案例演示了如何输入两个字符串形式的大整数、进行逐位相加并处理进位的过程。
1757

被折叠的 条评论
为什么被折叠?



