算法篇——小学生算数
2015-08-28 12:31
309 查看
来源:《算法导论入门经典》例题5.2.1
原题:很多学生在学习加法时,发现”进位“特别容易出错。你的任务是计算两个整数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个0(这是输入结束标记)。假设输入的整数都不超过9位。
样例输入:123 456
样例输出:0
样例输入:555 545
样例输出:3
样例输入:991 11
样例输出:2
分析:注意int的上限约是2000000000,可以保存所有9位整数,因此可以用整型int来保存输入。每次把a和b分别模10就能获取它的最低位,原理同全加器。
源码:
原题:很多学生在学习加法时,发现”进位“特别容易出错。你的任务是计算两个整数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个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; }
相关文章推荐
- gauss消元
- errno 的坑
- js实现带圆角的多级下拉菜单效果
- ScrollView嵌套导致onTouch中的ACTION_UP丢失的问题解决
- mongdb文档操作
- SQL 表操作小技巧(1)
- Android中的Intent(意图)的使用
- android zxing
- IOS UICollectionViewLayout详解
- zzuli OJ 1006: 求等差数列的和
- JPA 事务管理
- android中padding和 margin区别
- pythonbrew, pythonz, virtualenv
- 滑动删除listview的demo的分析
- 一个简单的PHP在线书签系统
- java执行Linux命令,支持通配符(*)
- C# 静态类与非静态类、静态成员的区别分析
- jQuery设置聚焦并使光标位置在文字最后
- zzuli OJ 1005: 整数幂
- JPQL