研究生复试------8 初级算术

问题描述 :

小学一年级学生正在学习多位数加法,从右到左每次一位数字。在运算过程中,进位对学生来讲是个难点。你的工作是统计每组加法运算的进位次数,老师根据你的统计结果就可以评估这些题目的难度。

输入说明 :

每行输入有两个正整数。参加运算的数和运算结果保证在32位整数范围内。

输出说明 :

对每行输入都有一行输出,输出内容与两个正整数做加法运算时产生的进位次数有关,

分三种情况:

1、没有进位

2、一次进位

3、多次进位

三种输出的格式不同,具体格式见样例输出。
在这里插入图片描述
**
题目骗人,一点都不是“初级算法”,我一开始以为直接计算两个数相加,哈哈哈,这道题运用的是大实数加法,如果你不懂,建议看一下这个,这是我目前觉得最好用的大实数法,没有之一,比较好理解
点这里
这里比大实数加法少一步,就是不用计算结果,只要记住进位就行了
**

#include <stdio.h>
#include<string.h>

int main(){
	char str1[33],str2[33];
	int i,count,len1,len2,up,temp;
	while(scanf("%s %s",str1,str2)!=EOF){
		count=0;
		strrev(str1);
		strrev(str2);
		len1=strlen(str1);
		len2=strlen(str2);
		//两数相加首先对齐,不够补0
		if(len1>len2){
			while(len1!=len2){
				str2[len2++]='0';
			}
			str2[len2]='\0';
		}
		else{
			while(len2!=len1){
				str1[len1++]='0';
			}
			str1[len1]='\0';
		}
		//补齐结束
		//两数相加过程
		up=0;
		for(i=0;i<len1;i++){
			temp=(str1[i]-'0')+(str2[i]-'0')+up;;
			up=temp/10;
			if(up>0)
				count++;	
		}
		//count为进位次数
		if(0==count){
			printf("No carry operation.\n");
		}
		else if(1==count){
			printf("1 carry operation.\n");
		}
		else{
			printf("%d carry operations.\n",count);
		}
	}
	
    return 0 ;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值