如何在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!遇到整数溢出,这超过了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));

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

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

例如:https://www.geeksforgeeks.org/multiply-large-numbers-represented-as-strings/

20值不正确?

value = 20!= 2432902008176640000 .

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

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

所以,使用int不能处理这种类型的大值

long数据类型只能用于n <= 20的阶乘。

对于较大的n值,可以使用java中的BigInteger类。math包,它可以保存最多2^Integer的值。MAX_VALUE: