初级加法.

初级加法
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;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值