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

C语言十进制转二进制程序无法处理100000000输入,无数组限制求方案

十进制转二进制无数组实现方案(支持最大1亿输入)

现有代码故障原因

你当前的实现是把二进制的每一位当作十进制数位累加存储到ans变量中,1亿对应的二进制长度为27位,远超过unsigned long long类型能存储的十进制数字最大长度(约20位),数值溢出导致输出结果错误。

逐位打印实现思路(无需数组、无溢出风险)

不需要存储完整的二进制数值,从最高位到最低位依次判断每一位的取值,直接逐位打印即可,核心逻辑如下:

  • 先找到输入数值对应二进制的最高位权重(即不大于输入值的最大2的幂次)
  • 从最高位开始逐位校验:如果当前输入值大于等于位权重,该位为1,减去权重后继续校验下一位;否则该位为0
  • 位权重每次除以2,直到权重为0时结束循环
  • 额外处理输入为0的边界情况,避免输出为空

实现代码

#include <stdio.h>

int main()
{
    unsigned int input, inp, mask = 1;
    printf("You have chosen Decimal to Binary Conversion!\n");
    printf("Enter a decimal number:\n");  
    scanf("%u", &input);
    inp = input;

    printf("%u in Decimal is ", inp);
    // 处理输入为0的特殊情况
    if(input == 0) printf("0");

    // 找到最高位的权重mask
    while (mask <= input / 2) {
        mask *= 2;
    }

    // 逐位打印
    while (mask > 0) {
        if (input >= mask) {
            printf("1");
            input -= mask;
        } else {
            printf("0");
        }
        mask /= 2;
    }
    printf(" in Binary Form.\n");
    return 0;
}

代码说明

  • 输入范围支持0到100000000,完全满足需求,不会出现溢出乱码问题
  • 未使用数组,仅通过两层循环实现,符合开发限制要求
  • 无需复杂的数学公式,核心逻辑仅涉及比较和加减乘除基础运算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:04