1 条题解

  • 0
    @ 2025-4-9 13:04:56

    题目分析

    题目要求计算两个无符号整数相加时产生的进位次数,并按格式输出结果。

    • 输入:多组测试数据,每行两个数,以 0 0 结束。
    • 输出:每行对应进位次数,格式为:
      • No carry operation.(0 次进位)
      • 1 carry operation.(1 次进位)
      • <n> carry operations.2\geq 2 次进位)

    解题思路

    1. 逐位相加:从**最低位(个位)**开始,计算每一位的和,并判断是否进位。
    2. 进位处理
      • 若某一位的和 10\geq 10,则进位次数 ans++,并保留进位 sum = 1 供下一位计算。
      • 否则,sum = 0,不影响下一位。
    3. 终止条件:当两个数都变成 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
    上传者