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

递归实现二进制转整数代码求助:计算结果不符合预期

问题分析与修正

让我们一步步拆解你代码里的问题,这几个小细节导致了结果出错:

核心错误点

  • 字符转数字的错误:b.charAt(0) 返回的是字符的ASCII码值,比如字符'1'对应的是49,而不是整数1。直接用这个值去计算肯定会导致结果爆炸,比如输入"101"时第一个字符'1'就用49去乘,结果自然不对。
  • 权重计算错误:二进制的每一位权重是2的(当前位的位置次方),对于字符串长度为n的二进制数,第一位(最左边)的权重应该是 2^(n-1),而不是2^n。比如"101"的第一位是1,对应的权重是2(3-1)=4,而不是23=8。
  • 终止条件错误:当字符串长度小于2时(也就是只剩最后一位字符),你返回了0,这会把最后一位的数值完全丢掉。正确的做法应该是返回最后一位字符对应的整数值。

修正后的代码

public static int binaryToInt(String b) {
    // 终止条件:只剩最后一位,返回对应的数字
    if (b.length() == 1) {
        return b.charAt(0) - '0'; // 用字符减去'0'的ASCII值得到对应的整数
    }
    // 第一位的数字 * 2^(长度-1) + 递归处理剩下的子串
    return (b.charAt(0) - '0') * (int) Math.pow(2, b.length() - 1) + binaryToInt(b.substring(1));
}

修正说明

  1. 字符转整数:使用 b.charAt(0) - '0' 是Java中把字符数字转成整数的常用技巧,因为字符'0'到'9'的ASCII码是连续递增的,减去'0'的ASCII值就能得到对应的0-9整数。
  2. 权重修正:将指数从 b.length() 改为 b.length() - 1,符合二进制数的位权规则——最左边的位是最高位,对应2的(长度-1)次方。
  3. 终止条件调整:当字符串长度为1时,直接返回该位的数值,确保最后一位的数值被正确计入结果。

测试输入"101"时,计算过程为:1*2^2 + 0*2^1 +1*2^0 =4+0+1=5,结果正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:53:18