如何用C语言实现正序输出输入整数的每一位数字而非倒序?
C语言正序输出整数各位数字实现方案
原代码问题分析
你当前的代码出现倒序输出的核心原因是:numbers%10 每次取到的是当前数字的最后一位(个位),所以打印顺序是从最低位到最高位,自然会输出倒序结果。同时你代码中统计位数的逻辑有误,count变量没有做累加,最后输出num得到的不是总位数。
实现正序输出的参考代码
#include <stdio.h> int main() { int numbers, original_num, count = 0, weight = 1; printf("\nEnter numbers: "); scanf("%d", &numbers); // 处理输入为0的特殊情况 if (numbers == 0) { printf("0 "); count = 1; } else { original_num = numbers; // 计算总位数和最高位的权重 while (original_num > 0) { count++; weight *= 10; original_num /= 10; } weight /= 10; // 修正权重到对应最高位的量级 // 从最高位开始逐位打印 original_num = numbers; while (weight > 0) { int digit = original_num / weight; printf("%d ", digit); original_num = original_num % weight; weight /= 10; } } printf("\nThe total number of digits is: %d\n", count); return 0; }
代码逻辑说明
- 提前备份输入的原始数字,避免计算过程中修改原值导致后续操作出错
- 先遍历原始数字得到总位数,同时算出最高位对应的权重(比如4位数的权重是1000)
- 每次用原始数字除以权重得到当前最高位的数字,再通过取模去掉已经输出的最高位,逐步降低权重直到为0,即可正序输出所有位
- 额外补充了输入为0的边缘场景处理,避免原逻辑输入0时无输出的问题
可选递归实现方案
如果不想计算权重,也可以用递归的方式实现,逻辑更简洁:
#include <stdio.h> void print_digit(int n) { if (n == 0) return; print_digit(n / 10); printf("%d ", n % 10); } int main() { int numbers, count = 0, temp; printf("\nEnter numbers: "); scanf("%d", &numbers); if (numbers == 0) { printf("0 "); count = 1; } else { temp = numbers; while (temp > 0) { count++; temp /= 10; } print_digit(numbers); } printf("\nThe total number of digits is: %d\n", count); return 0; }
- 递归会先深入到最高位再逐层返回打印,所以天然可以实现正序输出
内容的提问来源于stack exchange,提问作者newton
相关产品推荐
相关产品推荐

