首页 > 解决方案 > 使用递归将二进制整数转换为十进制整数

问题描述

我无法让这种将整数从二进制转换为十进制的方法正常工作。我发现的主要问题是,对于以 0 结尾的二进制数,程序会忽略最后一个 0。例如,如果我输入 1010,程序将返回 5 而不是 10。下面是我进行此转换的方法。

public int toDecimal(int inBase2){
    int num = 0;
    if(inBase2 < 0){
      num = -1;
      return num;
    }
    if(inBase2 == 0 && num == 0){
      return num;
    }else{
      num = inBase2 % 10 * (int)(Math.pow(2, Math.log10(inBase2)));
    return num + toDecimal(inBase2 / 10);
    }
  }

我将如何以允许它正确读取二进制整数中最后一个 0 的方式修复程序?

标签: javarecursion

解决方案


您正在以错误的方式进行计算。二进制数中的最低有效位被视为最高有效位。如此有效,1010 返回 0101 的结果。现在,您处理的第一个数字,在那个地方,乘以Math.pow(2, Math.log10(inBase2)),并赋予最大的权重。相反,您应该将递归函数的结果相乘,这样后面的调用(代表更高值的数字)就会相乘更多。例子

public int toDecimal(int inBase2){
    int num = 0;
    if(inBase2 < 0){
        num = -1;
        return num;
    }
    if(inBase2 == 0 && num == 0){
        return num;
    }else{
        num = inBase2 % 10;
        return num + 2 * toDecimal(inBase2 / 10);
    }
}

推荐阅读