java中十进制转二进制的方法

问题描述

该程序的大多数输入都可以正常工作,但是当我使用大数字时,例如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);
}

解决方法

您在 13! 处遇到 integer overflow,它超过了 int 可以容纳的最大数,即 231(约 2.1 x 10 9).

您可以将变量的类型从 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));
,

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

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

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

,

20 值不正确?

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

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

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

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

long 数据类型只能用于 n

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