#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; }
04-07
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交