多个数字按个位、十位、百位分别求和的C++代码是否正确可优化?
代码逻辑正确性校验
你给出的核心计算逻辑本身是正确的:
- 个位求和通过
%10取每个数字的个位再累加,计算规则正确 - 十位求和通过
/10 %10先移除个位再取余得到十位数值,计算规则正确 - 百位求和通过
/100 %10先移除后两位再取余得到百位数值,计算规则正确
但现有代码存在语法问题,无法直接运行:
- 未定义变量
a/b/c/d/e/f的类型和初始值,也未定义求和变量u/t/h的类型,编译会报错 - 缺少C程序必需的
main()入口函数
*注意:如果输入数字包含负数,C中负数取余结果为负,需要先对数字取绝对值再计算数位和,否则结果会不符合预期*
优化建议
- 避免硬编码固定数量的变量:如果后续需要计算更多数字的数位和,挨个罗列变量的写法冗余度极高,建议将待计算数字存入数组或
vector容器,通过循环遍历完成计算 - 支持多位数拓展:如果后续需要计算千位、万位的求和,可以嵌套循环实现,不需要单独为每一位写一行计算逻辑
- 避免全局使用
using namespace std;:工业级代码中该写法容易引发命名空间冲突,建议直接使用std::cout、std::vector等带命名空间的写法 - 变量命名优化:将
u/t/h改为unit_sum、ten_sum、hundred_sum这类语义化名称,提升代码可读性,降低后续维护成本 - 输出格式补全:最后一行输出末尾补充换行符
\n,避免不同终端输出时,末尾内容被命令行提示符覆盖
优化后完整可运行示例代码
#include <iostream> #include <vector> #include <cstdlib> // 用于取绝对值的abs函数 int main() { // 待计算的数字列表,可自由增减元素 std::vector<int> nums = {123, 456, 789, 234, 567, 890, -111}; int unit_sum = 0, ten_sum = 0, hundred_sum = 0; for (int num : nums) { int abs_num = abs(num); unit_sum += abs_num % 10; ten_sum += abs_num / 10 % 10; hundred_sum += abs_num / 100 % 10; } std::cout << "个位求和结果: " << unit_sum << "\n"; std::cout << "十位求和结果: " << ten_sum << "\n"; std::cout << "百位求和结果: " << hundred_sum << "\n"; return 0; }
内容的提问来源于stack exchange,提问作者James Alderney
相关产品推荐
相关产品推荐

