首页 > 解决方案 > 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 的一些未知错误(至少对我们来说)。

标签: javaeclipseconsole

解决方案


推荐阅读