You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:31:07