zoukankan      html  css  js  c++  java
  • 《算法竞赛入门经典》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的是个神
    为Chrome开发插件提高工作效率
    Javascript 控制style 小结
    svcutil 生成代理类时的问题
    xeam Build Definition Extension uninstall 卸载
    看看 Delphi XE2 为 VCL 提供的 14 种样式
    FireMonkey 绘图(1)
    终于, Delphi XE2 携带 GDI+ 库了
    关于禁止程序重复启动的另一种需要与实现
  • 原文地址:https://www.cnblogs.com/zhuangwei/p/5258715.html
Copyright © 2011-2022 走看看