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

未知整数长度下反转数字时保留前导零的C语言实现问询

如何反转整数并保留末尾的零(反转后作为前导零)?

原有的C程序用整数运算反转数字时,会自动“忽略”输入末尾的零——毕竟int类型本身就不存储前导零,反转3000得到的整数是3,打印出来自然就是3而不是0003。要解决这个问题,有两种靠谱的实现思路,我给你详细讲讲:

方法一:将输入当作字符串处理(最直观)

既然要保留所有数字字符,直接把输入读取成字符串,然后反转输出就行。这种方法绕开了整数类型的限制,能完美保留所有零:

#include <stdio.h>
#include <string.h>

int main(void) {
    char num[20]; // 定义足够长度的数组存储输入的数字字符串
    printf("Enter an integer: ");
    scanf("%s", num);
    
    printf("Reversed Number = ");
    // 从字符串最后一位开始向前遍历打印
    for (int i = strlen(num) - 1; i >= 0; i--) {
        printf("%c", num[i]);
    }
    printf("\n");
    
    return 0;
}

测试输入3000的话,程序会直接输出0003,完全符合需求。

方法二:整数运算+统计末尾零的数量

如果必须用整数运算的方式处理,可以先统计输入数字末尾的零的个数,反转剩下的非零部分后,再把统计好的零补在前面:

#include <stdio.h>

int main(void) {
    int n, temp, reversedNumber = 0, remainder, zeroCount = 0;
    printf("Enter an integer: ");
    scanf("%d", &n);
    temp = n; // 用临时变量处理,避免修改原输入值
    
    // 第一步:统计输入数字末尾的零的数量
    while (temp != 0 && temp % 10 == 0) {
        zeroCount++;
        temp /= 10;
    }
    
    // 第二步:反转去掉末尾零后的数字
    while (temp != 0) {
        remainder = temp % 10;
        reversedNumber = reversedNumber * 10 + remainder;
        temp /= 10;
    }
    
    // 第三步:先打印所有统计到的零,再打印反转后的数字
    printf("Reversed Number = ");
    for (int i = 0; i < zeroCount; i++) {
        printf("0");
    }
    printf("%d\n", reversedNumber);
    
    return 0;
}

这个方法的逻辑是:先把输入里的末尾零“剥离”出来计数,反转剩下的有效数字,最后把零补在反转结果的前面,同样能得到0003的输出。

两种方法里,字符串处理的方式更简单易懂,还能避免整数溢出的问题(比如输入特别长的数字时,字符串能处理更多位数);整数运算的方式则适合必须用数值类型处理的场景。

内容的提问来源于stack exchange,提问作者Dominic Motuka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:51