【问题标题】:How to convert decimal to binary in java如何在java中将十进制转换为二进制
【发布时间】:2021-02-24 15:56:51
【问题描述】:

程序的大多数输入都可以正常工作,但是当我使用大数字时,例如20 值不正确。有没有办法可以转换十进制数字并将它们输出为二进制?谢谢。

int n = Comp122.getInt("What number would you like to make a factorial?");
int factorial = 1;
for (int i = 1 ; i<=n ; i++) {
    factorial*=i;
    System.out.println(factorial);
}

【问题讨论】:

  • 20的阶乘为2432902008176640000,大于int的最大值。您以后如何显示该 int(无论是十进制、二进制还是以 42 为基数)不会改变 int 不能用于保存这么大的数字的事实。如果您使用的数字很容易大于 Integer 或 Long 最大值,那么您必须使用没有最大值的类(如 BigInteger)而不是原始数据类型,
  • 大概this post可以帮到你。

标签: java binary factorial


【解决方案1】:

您在13! 遇到integer overflow,它超过了int 可以容纳的最大数字,即231(约2.1 x 109支持>)。

您可以将变量的类型从 int 更改为 long,它可以容纳 263(大约 1.9 x 1019),但这也是将在20! 处超过其限制

要处理任意大的数字,请使用BigInteger 类作为变量类型。您的代码将类似于:

BigInteger factorial = BigInteger.ONE;
for (int i = 2; i < n; i++) {
    factorial = factorial.multiply(néw BigInteger(i + ""));
}

顺便说一下,将整数输出为二进制或十六进制:

System.out.println(Integer.toBinaryString(n));
System.out.println(Integer.toHexString(n));

【讨论】:

    【解决方案2】:

    n!变得非常大,可能 Integer 无法容纳它,因为 Integer 的限制为 2,147,483,647。

    这不是输出的问题,而是你遇到了溢出。 如果您有无限范围的输入可能适合 BigInteger,您可以尝试 BigInteger。否则,您可能想使用一些不受限制的数据结构,例如 String。并逐位计算。

    类似:https://www.geeksforgeeks.org/multiply-large-numbers-represented-as-strings/

    【讨论】:

      【解决方案3】:

      20 值不正确?

      值为 20! = 2,432,902,008,176,640,000。

      在 java 中,整数可以正确处理任何小于 2,147,483,648 的正值。

      int | 4 bytes | Stores whole numbers from -2,147,483,648 to 2,147,483,647
      

      因此,使用 int 无法处理这种类型的大值。

      long 数据类型只能用于 n

      对于较大的 n 值,我们可以使用 java.math 包中的 BigInteger 类,该类可以容纳高达 2^Integer.MAX_VALUE 的值:

      【讨论】:

        猜你喜欢
        • 2015-06-02
        • 2011-07-09
        • 2013-01-24
        • 1970-01-01
        • 2010-10-19
        • 2020-04-03
        • 2011-02-17
        • 1970-01-01
        相关资源
        最近更新 更多