C语言数字拆分为数位程序问题:输出数位顺序反转如何修复?
问题:C语言拆分数字数位顺序反转的修复方法
我正在尝试编写一个将数字拆分为其组成数位的C语言程序,目前的代码能正确输出数位,但顺序是反转的。
我的代码如下:
#include <stdio.h> int main() { int num; int digits; int count = 1; printf("Insert a positive number: "); do { scanf("%d", &num); } while (num <= 0); printf("In digits... \n"); // Number in digits while (num != 0) { digits = num % 10; printf("Digit %d --> %d \n", count, digits); num /= 10; count++; } }
运行结果示例:
Insert a positive number: 345 In digits... Digit 1 --> 5 Digit 2 --> 4 Digit 3 --> 3
修复方法
方法1:递归实现正序输出
递归的核心是先处理高位,再输出当前位。递归会先深入到数字的最高位,回溯时再依次输出,自然就是正序。
如果需要带数位序号,代码如下:
#include <stdio.h> int count = 1; void printDigits(int num) { if (num == 0) { return; } // 先递归处理更高位 printDigits(num / 10); // 输出当前位(此时对应原数的高位) printf("Digit %d --> %d \n", count++, num % 10); } int main() { int num; printf("Insert a positive number: "); do { scanf("%d", &num); } while (num <= 0); printf("In digits... \n"); printDigits(num); return 0; }
方法2:先算位数再从高位提取
先统计数字的总位数,然后用10的幂次作为除数,从最高位开始依次提取每一位。
代码示例:
#include <stdio.h> int main() { int num, temp, digitCount = 0; printf("Insert a positive number: "); do { scanf("%d", &num); } while (num <= 0); // 复制原数,避免修改原数影响位数计算 temp = num; // 统计位数 while (temp != 0) { temp /= 10; digitCount++; } // 计算最高位的除数(比如3位数对应100) int divisor = 1; for (int i = 1; i < digitCount; i++) { divisor *= 10; } printf("In digits... \n"); int count = 1; while (divisor != 0) { int currentDigit = num / divisor; printf("Digit %d --> %d \n", count++, currentDigit); num %= divisor; // 去掉已经输出的高位 divisor /= 10; // 除数降一位 } return 0; }
方法3:数组存储后反向输出
先把数位按倒序存入数组,再从数组末尾往前遍历输出,就能得到正序结果。
代码示例:
#include <stdio.h> int main() { int num, temp; int digitArr[10]; // 足够存储大部分整数的数位 int index = 0; printf("Insert a positive number: "); do { scanf("%d", &num); } while (num <= 0); temp = num; // 倒序存入数组 while (temp != 0) { digitArr[index++] = temp % 10; temp /= 10; } printf("In digits... \n"); int count = 1; // 从数组末尾往前输出 for (int i = index - 1; i >= 0; i--) { printf("Digit %d --> %d \n", count++, digitArr[i]); } return 0; }
内容的提问来源于stack exchange,提问作者user13716820
相关产品推荐
相关产品推荐

