UVA10035 Primary Arithmetic 题解

原题:UVA10035 Primary Arithmetic

个人博客


题意:

  • 求计算 \(a+b\) 时进位的次数。

思路:

  1. 由低位到高位判断是否进位。

  2. \(nw\) 计算进位,若能进到下一位 \(ans\) 加一,不能即略过。

步骤:

  • \(a≠0\)\(b≠0\) 时,计算 \(a\)\(b\)\(i\) 位加 \(nw\) 是否会进位;
  • \(a≠0\) 时,计算 \(a\)\(i\) 位加 \(nw\) 是否会进位;
  • \(b≠0\) 时,计算 \(b\)\(i\) 位加 \(nw\) 是否会进位;
  1. 有进位输出 \(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;
}
posted @ 2025-02-08 16:47  Wy_x  阅读(24)  评论(0)    收藏  举报