【问题标题】:Binary to decimal without using math.pow in java二进制到十进制而不在java中使用math.pow
【发布时间】:2017-06-19 04:35:45
【问题描述】:

所以我被要求编写一个将二进制数转换为十进制数的程序。在这种情况下,它是 10111。我遇到的问题是我不允许使用 math.pow,所以我必须使用嵌套循环。这是我目前所拥有的。

    public static void main(String[] args) {

        int x = 10111;

        int num = 0, counter = 0;

        for (int i = 1; i <= x; i *= 10) {

            int binaryDigit = x/i%10;
            num += (int) (Math.pow(2, counter) * binaryDigit);
            counter++;
        }
        System.out.println("\""+ x + "\" in binary is equivalent to " + num + " in decimal");
    }

【问题讨论】:

  • 你也可以通过乘以loop.2 power 5 =2*2*2*2*2
  • @luk2302 代码有效,但我的问题是我想用循环替换 math.pow 的东西。
  • @FastSnail 确实如此。由于问题代码中的循环以最低有效数字开头,因此实际上可以在同一循环内计算功率。 (正如我的回答所做的那样)
  • 一个非常缓慢、糟糕和懒惰的解决方案:num = Integer.parseInt(Integer.toString(x), 2);。使用过的库不使用Math.pow(),但我不确定是否允许您使用它们。否则你可以自己写一个 pow() 函数。

标签: java


【解决方案1】:

您可以在 Java 中使用位移计算 2 的幂。

观察1 是 20。另请注意,以二进制表示法在1 的右侧添加k 零会产生k 的 2 次方,原因与以十进制表示法添加零会使数字乘以十的原因相同。

因此,您可以用这个简单的表达式替换对Math.pow 的调用:

num += (1 << counter) * binaryDigit;

注意: 将二进制数表示为仅由 1 和 0 组成的十进制数有一个不便的限制:不能表示 1023 以上的数字,因为十进制位数用完了。更方便的表示是String

【讨论】:

  • 我会加强您的回答:除非您已经在使用浮点值 (floatdouble),否则您应该永远不要使用 Math.pow()!。跨度>
  • @Robert 我不知道“从不”这个说法太强烈了,但我同意将Math.pow 转换为int 是一个非常强烈的信号,你应该寻找一个做同样事情的更好选择。
  • 此方法有效,但很抱歉我的导师不允许我使用它。还是谢谢。
【解决方案2】:

当您遍历循环中的二进制数字时,您可以将当前数字位置的值加倍。 这样,您就可以在每个步骤中获得所需的 pow 值。 1,2,4,8,16,...

public static void main(String[] args) {

    int x = 10111;

    int num = 0;

    int digitval = 1;

    for (int i = 1; i <= x; i *= 10) {

        int binaryDigit = x/i%10;
        num += digitval * binaryDigit;
        digitval *= 2;
    }
    System.out.println("\""+ x + "\" in binary is equivalent to " + num + " in decimal");
}

【讨论】:

  • 这是我一直在寻找的方法。因为我正在介绍java编程。我只被允许使用你描述的基本方法。我运行了代码,它起作用了。非常感谢。
【解决方案3】:

也许这样的事情可以解决问题

int binaryNumber = x;
int power = 0;
int result = 0;
while (binaryNumber / 10 > 0) {
//lets start the loop and parse the length of the binary number
int digit = binaryNumber % 10;
result += digit << power;
power++;
binaryNumber = binaryNumber/10;
}

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 2015-04-26
    • 1970-01-01
    • 2020-06-25
    • 2015-06-15
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多