1 条题解
-
0
题目分析
题目要求计算两个无符号整数相加时产生的进位次数,并按格式输出结果。
- 输入:多组测试数据,每行两个数,以
0 0
结束。 - 输出:每行对应进位次数,格式为:
No carry operation.
(0 次进位)1 carry operation.
(1 次进位)<n> carry operations.
( 次进位)
解题思路
- 逐位相加:从**最低位(个位)**开始,计算每一位的和,并判断是否进位。
- 进位处理:
- 若某一位的和 ,则进位次数
ans++
,并保留进位sum = 1
供下一位计算。 - 否则,
sum = 0
,不影响下一位。
- 若某一位的和 ,则进位次数
- 终止条件:当两个数都变成
0
时,停止计算。
关键优化
- 循环条件:
while(1)
配合if(a == 0 && b == 0) break;
确保所有位数都被处理。 - 进位传递:
sum
不仅存储当前位的和,还存储上一位的进位值。
代码实现
#include<iostream> using namespace std; int main() { int a,b; while(cin>>a>>b) { if(a == 0&&b == 0) break; // 在这贡献了n次WA~,傻! int ans = 0; int tmp1,tmp2; int sum = 0; while(1) { tmp1 = a%10; a /= 10; tmp2 = b%10; b /= 10; sum = tmp1 + tmp2 + sum; if(sum>=10) { ans++; sum = 1; } else sum = 0; if(a == 0&&b == 0) break; } if(ans == 0) cout<<"No carry operation."<<endl; else if(ans == 1) cout<<"1 carry operation."<<endl; else cout<<ans<<" carry operations." <<endl; } return 0; }
- 输入:多组测试数据,每行两个数,以
- 1
信息
- ID
- 1563
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者