初级加法
Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others)
Total Submissions: 151 Accepted Submissions: 66
Problem Description
孩子们是这样学习多位数的加法:将两个加数右对齐,然后从右到左每次加一位。这种情况下经常会产生进位,即两位相加结果若大于等于10就向左进一位。对于孩子们来说,判断进位具有一定的挑战性。你的任务是:给定任意的两个加数,要求统计出进位的次数,以帮助教育者评估该加法的难度。
Input
每一行是两个少于10位的无符号整数,最后一行为0 0,表示输入结束。
Output
对输入文件的每一行(除最后一行外),计算它们在相加时进位的次数并输出。按照输出样例的格式输出。
Sample Input
123 456
555 555
123 594
0 0
Sample Output
No carry operation.
3 carry operations.
1 carry operation.
#include <stdio.h>
#include <string.h>
int main()
{
char num1[10],num2[10];
int count;
int len1,len2;
while(1) {
scanf("%s%s",num1,num2);
count = 0;
if(!strcmp(num1,"0") && !strcmp(num2,"0"))
break;
len1 = strlen(num1)-1;
len2 = strlen(num2)-1;
if(len1 == len2) {
for(int i = len1 ; i >= 0 ; i--)
{
if((num1[i]-'0' + num2[i]-'0')>=10) {
count ++;
num1[i-1] ++;
}
}
}
if(len1>len2) {
for(; len2 >= 0 ;) {
if((num1[len1]-'0' + num2[len2]-'0')>=10) {
count ++;
num1[len1-1]++;
}
len1--;
len2--;
}
for(;len1>0;) {
if(num1[len1] -'0'>= 10) {
count ++;
num1[len1-1] ++;
}
len1--;
}
if(num1[0]-'0'>=10)
count++;
}
if(len2>len1) {
for(; len1 >= 0 ;) {
if((num2[len2]-'0' + num1[len1]-'0')>=10) {
count ++;
num2[len2-1] ++;
}
len2--;
len1--;
}
for(;len2>0;) {
if(num2[len2] -'0'>= 10) {
count ++;
num2[len2-1] ++;
}
len2--;
}
if(num2[0]-'0'>=10)
count++;
}
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;
}