Description
读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。
Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A B K",相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即A+B的值或者是-1。
Sample Input
1 2 1 11 21 1 108 8 2 36 64 3 0 0 1
Sample Output
3 -1 -1 100感想:AC了一把辛酸泪 自己想的有点多 但是改了一下还是AC了 希望能有一个同道中人能明白我的思路;#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int n; char a[20],b[20],a1[20],b1[20]; while(scanf("%s %s %d",a,b,&n)!=EOF) { if(strcmp("0",a)==0&&strcmp("0",b)==0) break; int len1=strlen(a); int len2=strlen(b); for(int i=0;i<len1;i++) a1[i]=a[i]; for(int i=0;i<len2;i++) b1[i]=b[i]; int Max=max(max(len1,len2),n); if(len1!=len2) { if(len1==Max) { for(int i=0;i<len1-len2;i++) b[i]='0'; int i,j; for( i=len1-len2,j=0;i<len1;i++,j++) { b[i]=b1[j]; } } else if(len2==Max) { for(int i=0;i<len2-len1;i++) a[i]='0'; int i,j; for( i=len2-len1,j=0;i<len2;i++,j++) { a[i]=a1[j]; } } else if(Max==n) { for(int i=0;i<Max-len2;i++) b[i]='0'; int i,j; for(i=Max-len2,j=0;i<Max;i++,j++) { b[i]=b1[j]; } for(int i=0;i<Max-len1;i++) a[i]='0'; for( i=Max-len1,j=0;i<Max;i++,j++) { a[i]=a1[j]; } } int flag=0; for(int i=Max-1;i>=max(Max-n,0);i--) { if(a[i]!=b[i]) flag=1; } if(!flag) printf("-1\n"); else { int sum1=0; int sum2=0; for(int i=0;i<Max;i++) { sum1=sum1*10+a[i]-'0'; sum2=sum2*10+b[i]-'0'; } printf("%d\n",sum1+sum2); } } else{ int flag1=0; for(int i=len1-1;i>=max(len1-n,0);i--) { if(a[i]!=b[i]) flag1=1; } if(!flag1) printf("-1\n"); else { int sum1=0; int sum2=0; for(int i=0;i<len1;i++) { sum1=sum1*10+a[i]-'0'; sum2=sum2*10+b[i]-'0'; } printf("%d\n",sum1+sum2); } } } return 0; }