《算法竞赛入门经典》5.21小学生算术

 1 /*
 2 *很多学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个整数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,
 3  直到读到两个0(这是输入结束标记)。假设读入的整数都不超过9个数字。
 4 *样例输入:
 5 123 456
 6 555 555
 7 123 594
 8 0 0
 9 *样例输出:
10 0
11 3
12 1
13 */
14 
15 //源程序
16 #include <stdio.h>
17 
18 int main()
19 {
20     int a, b;
21     while(scanf("%d%d", &a, &b) == 2)
22     {
23         if(!a && !b) return;     //读到两个0,则输入结束
24         int i, c = 0, ans = 0;    //c表示进位,ans表示进位个数
25         for(i = 9; i >= 0; i--)
26         {
27             c = ((a%10 + b%10 + c) > 9) ? 1 : 0;
28             ans += c;
29             a /= 10; b /= 10;
30         }
31         printf("%d
", ans);
32     }
33     return 0;
34 }
35 /*分析:
36 *int的上限约2000000000,可保存所有9位整数,因此用整数来保存输入数据。每次把a和b分别模10获得最低位。
37 */
38 
39 //程序(2)
40 #include<stdio.h>
41 
42 int main()
43 {
44     int m, n, i, t, k, a[3], b[3];    //t表示进位,k表示进位个数
45     while(scanf("%d%d
", &m, &n) != EOF)
46     {
47         if( !(m||n) ) break;        //读到两个0,则跳出循环
48         for(i = 0; i < 3; i++)
49         {
50             a[i] = m - (m/10) * 10;    //等价于a%10
51             b[i] = n - (n/10) * 10;    //等价于b%10
52             m /= 10;
53             n /= 10;
54         }
55         for(i=k=t=0; i < 3; i++)
56             if(t = ((a[i]+b[i]+t) / 10)) k++;
57         printf("%d
", k);
58     }
59     return 0;
60 }
亲爱的读者:如果觉得本文对你有所帮助,请点击推荐,分享给其他人!
原文地址:https://www.cnblogs.com/zhuangwei/p/5258715.html