Java:如何使用数组解决大型阶乘?

凯文·奥格登

我可以找到所有可用的在线解决方案,BigInteger但必须使用数组来解决。

我只是一个初学者,我什至把它带到了我的计算机科学俱乐部,甚至无法弄清楚。

每当我输入大于的数字时31,输出始终为零。

另外,当我输入一个大于的数字时12,输出总是不正确。

例如在应该fact(13)返回1932053504时返回6227020800

这是我到目前为止的内容:

import java.util.Scanner;

class Fact
{
    public static void main(String[] args)
    {
        Scanner kb = new Scanner(System.in);
        System.out.println("Enter the number you wish to factorial");
        int x = kb.nextInt();
        System.out.println(fact(x));
    }

    public static int fact(int x)
    {
        int[] a = new int[x];

        int product = 1;

        for(int i = 0; i < a.length; i++)
        {
            a[i] = x;
            x--;
        }

        for(int i = 0; i < a.length; i++)
        {
            product = product * a[i];
        }

        return product;
    }
}
Elipzer

最大值使大数变糟

可悲的是,由于整数和long最大值,您不能将其大于

对于长期:

2^63 - 1

9223372036854775807

9 quintillion 223 quadrillion 372 trillion 36 billion 854 million 775 thousand 807

对于整数:

2^31 - 1

2147483647

2 billion 147 million 483 thousand 647

(我在上面写上名字来显示尺寸)

在计算过程中的任何时间点,您都会遍历这些“最大值”,您将使变量溢出,从而导致其行为与预期不同,有时会导致形成奇怪的零。

即使BigIntegers也会有问题,尽管它可以上升到比正数高得多的数字longsints这就是为什么它们与生成大量数字(例如阶乘)的方法一起使用的原因。

您似乎想避免使用BigInteger并且仅使用原始函数,因此long它将是您可以使用的最大数据类型。

即使将所有内容都转换为long(当然,除了数组迭代器之外),您也只能精确计算最多20个阶乘。超出此范围的任何内容都会使变量溢出。这是因为21!长时间超过“最大值”。

简而言之,您将需要使用BigInteger或创建自己的类来计算大于20的数字的阶乘。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用批处理脚本查找大型阶乘

来自分类Dev

如何使用批处理脚本查找大型阶乘

来自分类Dev

仅在Java中使用数组计算阶乘为50

来自分类Dev

仅在Java中使用数组计算阶乘为50

来自分类Dev

如何在Java中使用循环计算阶乘

来自分类Dev

如何使用Prolog计算阶乘

来自分类Dev

如何使用Prolog计算阶乘

来自分类Dev

将阶乘与numpy或scipy数组混淆使用

来自分类Dev

如何使用PLINQ并行初始化大型数组?

来自分类Dev

这种方法如何解决我的阶乘?

来自分类Dev

使用Java 8 IntStream计算阶乘?

来自分类Dev

Java中使用BigInteger的50阶乘

来自分类Dev

在python中使用大型数组

来自分类Dev

如何使用JEval库在Java中评估幂,根,阶乘函数?

来自分类Dev

如何使用JEval库在Java中评估幂,根,阶乘函数?

来自分类Dev

如何使用 Java 逐块解析大型 XML 文件

来自分类Dev

如何计算数字数组的对数阶乘

来自分类Dev

如何计算数字数组的对数阶乘

来自分类Dev

如何使用 Java Intent 解决此问题?

来自分类Dev

在文件Java上管理大型数组

来自分类Dev

如何创建一个大型数组?

来自分类Dev

如何在NodeJS中迭代大型数组

来自分类Dev

如何预加载大型数组以并行缓存?

来自分类Dev

如何存储许多大型多维数组?

来自分类Dev

如何解决“数组溢出”,在PHP或使用MySQL?

来自分类Dev

在MATLAB中使用大型多维数组

来自分类Dev

使用Python分配内存中的大型数组

来自分类Dev

优化使用大型数组的Excel公式

来自分类Dev

使用numpy创建大型数组的最佳dtype