C++计算A*B+C结果各位数之和 代码错误求修正方案
代码问题排查
- 变量
sum定义位置错误:你将sum定义在for循环外层,所有测试用例的计算结果会被累加在一起,且每个用例处理完成后没有重置sum为0,无法得到每个用例独立的计算结果。 - 位数处理的循环逻辑错误:你拆分的两个while循环存在逻辑漏洞,比如计算102的各位和时,第一个循环遇到末位2相加后t变为10,此时
t%10==0会退出第一个循环,第二个循环只会不断把t除以10,不会把高位的1加到sum中。同时数字0本身加和不影响结果,完全没必要单独处理末位为0的场景。 - 输出逻辑不符合要求:要求输出N个用空格分隔的结果,你当前代码只会输出所有用例累加后的一个sum值,且前后多打了无关空格。
优化实现思路
只需要一个while循环即可完成各位数求和:只要t不等于0,就每次取末位t%10加到sum中,再执行t = t / 10即可,即使某一位是0,加0也不会影响总和,无需额外判断。
修正后的完整代码
#include <iostream> using namespace std; // 单独封装各位数求和函数,逻辑更清晰 int digitSum(int num) { int sum = 0; while (num > 0) { sum += num % 10; num /= 10; } return sum; } int main () { int n, a, b, c; cin >> n; for (int i = 0; i < n; i++) { cin >> a >> b >> c; int res = digitSum(a * b + c); // 控制输出格式,第一个结果前不输出空格 if (i != 0) cout << " "; cout << res; } cout << endl; return 0; }
内容的提问来源于stack exchange,提问作者cs_quant
相关产品推荐
相关产品推荐

