问题描述 :
小学一年级学生正在学习多位数加法,从右到左每次一位数字。在运算过程中,进位对学生来讲是个难点。你的工作是统计每组加法运算的进位次数,老师根据你的统计结果就可以评估这些题目的难度。
输入说明 :
每行输入有两个正整数。参加运算的数和运算结果保证在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 ;
}