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

Java十进制转二进制代码故障排查:无法通过全部测试用例

十进制转二进制Java代码问题排查

你的代码存在三个关键问题,导致无法通过所有测试用例:

问题1:未处理输入为0的场景

当输入num=0时,while(num>0)循环不会执行,binary变量为空字符串,调用Integer.parseInt(binary)会直接抛出NumberFormatException,而0的二进制正确结果应该是0。

问题2:未处理负数输入

输入负数时,同样不满足num>0的循环条件,binary为空导致抛出异常,而负数的二进制需要以补码形式表示,代码完全没覆盖这种场景。

问题3:二进制数值超出int范围导致溢出

Java的int类型仅能表示32位有符号整数(最大值为2^31-1),当输入的十进制数对应的二进制字符串长度超过31位时,Integer.parseInt无法解析,会抛出数值溢出异常。比如输入2147483647,其二进制是31个1,转成int会直接溢出。


修正后的代码

考虑到二进制数的长度可能超出int范围,建议返回字符串类型来存储结果,同时覆盖0和负数的处理逻辑:

import java.util.Scanner;

public class Converter {
    public static String toBinary(int num) {
        // 处理输入为0的情况
        if (num == 0) {
            return "0";
        }

        boolean isNegative = num < 0;
        // 负数先取绝对值处理,后续再转补码
        if (isNegative) {
            num = -num;
        }

        String binary = "";
        while (num > 0) {
            binary = (num % 2) + binary;
            num /= 2;
        }

        // 处理负数的补码转换
        if (isNegative) {
            // 第一步:取反
            StringBuilder complement = new StringBuilder();
            for (char c : binary.toCharArray()) {
                complement.append(c == '0' ? '1' : '0');
            }
            // 第二步:加1,处理进位
            int carry = 1;
            StringBuilder result = new StringBuilder();
            for (int i = complement.length() - 1; i >= 0; i--) {
                int digit = complement.charAt(i) - '0' + carry;
                result.insert(0, digit % 2);
                carry = digit / 2;
            }
            // 如果还有进位,补1
            if (carry == 1) {
                result.insert(0, '1');
            }
            // 补全到32位(int为32位有符号数)
            while (result.length() < 32) {
                result.insert(0, '1');
            }
            return result.toString();
        }

        return binary;
    }
}

public class Program {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        System.out.print(Converter.toBinary(x));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:20:27