如何用C语言打印整数各位数字并以加号分隔?
实现整数各位数字带加号格式的求和输出
现有一段C语言代码可计算用户输入整数的各位数字之和,当前输出格式为「12345 = 15」,需修改代码实现输出格式「1 + 2 + 3 + 4 + 5 = 15」,即打印整数的各位数字并在中间添加加号,同时保留求和结果输出。原始代码如下:
#include <stdio.h> int sum(int n); //Prototype int main(void){ int number; printf("Enter number: "); scanf("%d", &number); printf("%d = %d\n", number, sum(number)); } //Sum Function int sum(int n){ int total = 0; while (n != 0) { total += n % 10; n /= 10; } return total; }
修改思路
要实现目标输出,核心是先拆分整数的每一位数字并按原顺序存储,再依次输出数字并添加加号分隔,最后输出求和结果。因为通过n%10拆分数字时是从个位开始取,所以需要先把各位数字存入数组,再倒序输出才能匹配原数的高位到低位顺序。
修改后的代码
#include <stdio.h> int sum(int n); void print_digits_with_plus(int n); int main(void){ int number; printf("Enter number: "); scanf("%d", &number); // 处理负数情况:先输出负号再处理绝对值 if (number < 0) { printf("-"); number = -number; } print_digits_with_plus(number); printf(" = %d\n", sum(number)); } // 打印各位数字并添加加号分隔 void print_digits_with_plus(int n){ int digits[10]; // 假设整数最多10位,可根据需求调整长度 int count = 0; // 处理输入为0的特殊情况 if (n == 0) { printf("0"); return; } // 拆分各位数字存入数组 while (n != 0) { digits[count++] = n % 10; n /= 10; } // 倒序输出数字,仅在非最后一位后添加加号 for (int i = count - 1; i >= 0; i--) { printf("%d", digits[i]); if (i != 0) { printf(" + "); } } } // 计算各位数字之和 int sum(int n){ int total = 0; // 统一处理负数,确保求和正确 n = n < 0 ? -n : n; while (n != 0) { total += n % 10; n /= 10; } return total; }
关键改动说明
- 新增
print_digits_with_plus函数,专门负责拆分数字并按要求格式输出:- 用数组存储拆分后的各位数字,解决从个位取数导致的顺序颠倒问题;
- 单独处理输入为0的特殊情况,避免无输出;
- 倒序遍历数组输出数字,仅在非最后一位后添加加号,保证格式正确。
- 完善
sum函数,增加对负数的处理逻辑,确保无论输入正负都能正确计算各位和。 - 在
main函数中处理负数输入,先输出负号再处理绝对值部分,保证负数的输出格式符合预期。
内容的提问来源于stack exchange,提问作者CalvinChua
相关产品推荐
相关产品推荐

