这段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
相关产品推荐
相关产品推荐

