java - Eclipse 控制台显然错误地计算了 1,000,000 的阶乘
问题描述
与朋友一起对 Java 上的 BigInteger 类进行了一些测试,他编写了一个打印“n:”并接收给定数字以找到其阶乘的代码。一段时间后,我尝试计算 1,000,000 的阶乘,但随后(经过几分钟的计算)控制台只显示了很多零,甚至没有打印“n:”,当我运行程序和“n !:" 显示结果时。
在测试中,直到 300k,代码运行良好(除了计算时间,但考虑到数字,这低于预期)。Obs.:循环用于分隔行,因为它们仅支持 4096 个字符
public static BigInteger zero = new BigInteger("0");
public static BigInteger one = new BigInteger("1");
public static BigInteger minusOne = new BigInteger("-1");
public static BigInteger fat(BigInteger n) {
if(n.equals(zero)) {
return new BigInteger("1");
}
BigInteger i = new BigInteger(n.toString());
while(!i.equals(one)) {
i = i.add(minusOne);
n = n.multiply(i);
}
return new BigInteger(n.toString());
}
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.print("n: ");
BigInteger bigInt = new BigInteger(in.nextLine());
String bigString = fat(bigInt).toString();
int strSize = bigString.length();
System.out.println("n! = ");
for (int i = 0; i < strSize; i++) {
if((i+1)%4096==0) {
System.out.printf("%c\n",bigString.charAt(i));
}else {
System.out.print(bigString.charAt(i));
}
}
in.close();
}
}
假设会发生一些输出,而不是一堆零并且显然覆盖了第一个打印。即使是 300k 这样的大数字,打印“n:”和“n!:”仍然存在。没有关于溢出或堆栈溢出的错误消息。在某些时候,我认为控制台只显示数字的最后一部分,但问朋友,他说控制台或 Eclipse 的一些未知错误(至少对我们来说)。
解决方案
推荐阅读
- java - org.springframework.boot.builder.SpringApplicationBuilder。
([Ljava/lang/Object;)V - javascript - 在 ngSwitchCase 中使用额外的参数
- configuration - configtx.yaml 中的组织
- android - 在设备注册时未通过 DevicePolicyManager 在 Android Q 中为设备所有者应用授予后台位置权限
- r - 从 GLMM 中提取方差分量
- r - 宽格式:计算特定批次列的行均值的函数,然后按比例放大多个批次
- set - 使用仅包含一种元素的集合的子集计算不同分区的方法
- sql - 如何回滚从存储过程中批量声明的事务?
- html - 为什么我的网站在移动 Safari 中的地址栏后面开始?
- unity3d - 如何在 3D 对象上绘画?