UVA10035 Primary Arithmetic 题解
原题:UVA10035 Primary Arithmetic
个人博客
题意:
- 求计算 \(a+b\) 时进位的次数。
思路:
-
由低位到高位判断是否进位。
-
用 \(nw\) 计算进位,若能进到下一位 \(ans\) 加一,不能即略过。
步骤:
- 当 \(a≠0\) 且 \(b≠0\) 时,计算 \(a\) 和 \(b\) 第 \(i\) 位加 \(nw\) 是否会进位;
- 当 \(a≠0\) 时,计算 \(a\) 第 \(i\) 位加 \(nw\) 是否会进位;
- 当 \(b≠0\) 时,计算 \(b\) 第 \(i\) 位加 \(nw\) 是否会进位;
- 有进位输出 \(ans\) 的值,没有输 “No”,再输出 “ carry operations.” 。
- 注:由于判断表达式返回 bool 变量,进位判断直接写在加法算式里即可。
代码:
#include<bits/stdc++.h>
using namespace std;
//保险用long long
long long a,b;
long long ans;//统计进位数
int nw;//计算进位
int main()
{
while(cin>>a&&cin>>b) //cin输入失败返回值为0
{
if(a==0&&b==0) break; //循环结束条件
nw=0; //清空
ans=0;
while(a!=0&&b!=0)
//第一位开始判断进位, 从低位到高位
{
nw=(a%10+b%10+nw)/10; //计算进位
ans=ans+(nw>=1);
a=a/10; //继续判断a的下一位
b=b/10; //继续判断b的下一位
}
while(a!=0)
{
nw=(a%10+nw)/10 ;//计算进位
ans=ans+(nw>=1);
a=a/10; //继续判断a的下一位
}
while(b!=0)
{
nw=(b%10+nw)/10; //计算进位
ans=ans+(nw>=1);
b=b/10; //继续判断b的下一位
}
if(ans!=0) cout<<ans; //有进位输出 ans 的值
else cout<<"No"; //没有输 No
cout<<" carry operations."<<endl;//固定格式,有“ ”
}
return 0;
}
以下是博客签名,正文无关
本文来自博客园,作者:Wy_x,转载请在文首注明原文链接:https://www.cnblogs.com/Wy-x/articles/18704620
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC-BY-NC-SA 4.0 协议)进行许可。

浙公网安备 33010602011771号