显示50!在 Java

Displaying 50! in Java

我被指派编写一个基于以下代码的程序,该程序可以显示 50 阶乘。由于基本类型不能容纳如此大的数字,我被要求使用整数数组并为大数字的 "parts" 使用单独的槽。这是我得到的代码...

class Fifty
{
    public static void main(String[] args)
    {
        System.out.println("0! = " + fact(0));
        System.out.println("1! = " + fact(1));
        System.out.println("5! = " + fact(5));
        System.out.println("50!= " + fact(50));
    }
    public static int fact(int n)
    {
        int product = 1;
        for (int i = 2; i <= n; i++)
        {
        product = product * i;
        }
        return product;
    }
}

这是我收到的说明

Fifty Factorial

use an array as you use a product in your program.

Int type cannot fit the value of 50!, so we use an array for every individual digit in its value.

if a slot is greater than 9...

0 6 12 0

0 7 2 0 Carry the one over, keep the two set where it is.

product[i] / 10 will give you what to carry product[i] % 10 will give you what to keep Multiply this by the next factorial value and repeat until finished and you have a definite answer to display

现在,我知道了如何使用这种方法,但我不知道的是如何实际创建具有我需要的值的数组。我如何得到50的答案! "broken up"进入数组的碎片?

与其将值存储在数组中,不如使用正确的数据类型。因此,您可以使用 BigInteger.

而不是使用 int

您可以通过将其分解为一些组成部分来使其更容易实现。

您将需要一种方法将整数转换为数字表示数组,因此通过单元测试实现该方法:

public static int[] intToDigitArray(int input) {
  //e.g. 50 becomes [5,0]  (or [0,5] if you prefer)
}

您将需要一种可以将两个数字表示数组相乘的方法:

public static int[] multiply(int[] a, int[] b) {
  //e.g. multiply([1,2] , [1,1]) becomes [1,3,2]
}

如果您必须使用适当的数组而不是例如数组列表,您还需要担心要在乘法中分配的结果数组的大小。所以你需要一个方法,比如:

public static int[] allocateArray(int[] a, int[] b) {
  //If I have two arrays of size x and y, whats the max size I need for the output array?
  //initialise with zeros?
}

如果您开始实现这些功能,边走边测试,遇到困难时再回来提出具体问题,您可能会得到更有用的答案。我没有在上面给出任何实现,因为这是一个家庭作业问题,我假设你不希望得到一个完整的解决方案。