来源:《算法竞赛入门经典》例题5.2.1
原题:很多学生在学习加法时,发现”进位“特别容易出错。你的任务是计算两个整数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个0(这是输入结束标记)。假设输入的整数都不超过9位。
样例输入:123 456
样例输出:0
样例输入:555 545
样例输出:3
样例输入:991 11
样例输出:2
分析:注意int的上限约是2000000000,可以保存所有9位整数,因此可以用整型int来保存输入。每次把a和b分别模10就能获取它的最低位,原理同全加器。
源码:
#include<stdio.h> int main() { int a,b,i,c=0,n=0; //c表示进位位,n表示进位次数 while(scanf("%d %d",&a,&b)==2) { if(!a && !b) return; //读入两个0,输入结束 while(a || b) //只要a,b不全为0,对应位相加就可能有进位(不要忽视来自低位的进位) { c = (a%10) + (b%10) + c > 9 ? 1:0; //原理同全加器(加数、被加数与低位的进位数为输入,和数与进位为输出) n+=c; //进位次数统计 a/=10; //向右移位 b/=10; } printf("%d\n",n); n=0; } return 0; }