这道题太阴险了。。居然还有单复数。。。
1的时候和多个的时候不一样。。。。。。。
题意:给你两个数,问如果有两个数用笔算相加,有多少次进位。
思路:简单模拟。但情况要考虑全,而且注意单复数的输出形式不同。可能WA的数据有:
0 5
999999 8
901 99
#include <stdio.h> #include <string.h> char a[15],b[15]; int aInt[15],bInt[15]; void inverse() { int i; //转a for(i=0;i<strlen(a);i++) aInt[strlen(a)-1-i]=a[i]-48; //转b for(i=0;i<strlen(b);i++) bInt[strlen(b)-1-i]=b[i]-48; //test /*for(i=0;i<strlen(a);i++) printf("%d ",aInt[i]); printf("\n"); for(i=0;i<strlen(b);i++) printf("%d ",bInt[i]); printf("\n");*/ } int main() { int i; int count; while(scanf("%s%s",&a,&b)) { if(strcmp(a,"0")==0 && strcmp(b,"0")==0) break; //init count=0; memset(aInt,0,sizeof(aInt)); memset(bInt,0,sizeof(bInt)); //将a[],b[]中的数转为int型,且低位在1位 inverse(); for(i=0;i<=strlen(a) || i<=strlen(b);i++) if(aInt[i]+bInt[i]>=10) { count++; aInt[i+1]++; } if(count==0) printf("No carry operation.\n"); else if(count==1) printf("1 carry operation.\n"); else printf("%d carry operations.\n",count); } return 0; }