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

这段Java实现任意进制转十进制的代码存在什么问题?

问题根因

代码核心错误是误用Java运算符:^ 在Java中是按位异或运算符,并非数学幂运算,同时循环中错误修改了原始进制参数b的取值,共同导致权值计算完全错误。

具体错误点
  • 循环中直接修改了传入的原始进制参数b,第一次迭代后b就不再是输入的进制值
  • 权值计算逻辑错误,b^k得到的是位运算异或结果,不是b的k次方的数学结果
    以你测试的八进制(b=8)场景为例:
    k=0时8^0 = 8,而非预期的1
    k=1时8^1 = 9,而非预期的8
    权值完全不符合要求,最终输出结果自然和预期不符。
修复代码

推荐使用动态累计权值的方案实现,性能更高且不需要调用幂函数:

import java.util.*;     
public class Main{
    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        int n = scn.nextInt();
        int b = scn.nextInt();
        int d = getValueIndecimal(n, b);
        System.out.println(d);
     }
  
     public static int getValueIndecimal(int n, int b){
        int result = 0;
        int power = 1; // 初始对应b^0=1
      
        while(n != 0)
        {
            int r = n % 10;
            result += r * power;
            power *= b; // 下一位权值为当前权值*进制基数
            n = n / 10;
        }
        return result;
     }
}
验证结果

输入八进制数1172、进制8时,计算过程为2*1 +7*8 +1*64 +1*512 = 634,和预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:12:02