显示50!在Java中

时间:2015-10-15 13:03:10

标签: java arrays factorial

我被分配编写一个基于以下代码的程序,可以显示50个阶乘。由于原始类型不能适合这么大的数字,我被要求使用整数数组并使用单个槽来表示大数的“部分”。这是我给代码编写的代码......

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;
    }
}

这是我给出的教学笔记

  

五十个因子

     

在程序中使用产品时使用数组。

     

Int类型不能适合50!的值,所以我们每个都使用一个数组   个人数字的价值。

     

如果一个插槽大于9 ......

     

0 6 12 0

     

0 7 2 0携带一个,保持两个设置。

     

产品[i] / 10会给你带什么产品[i]%10会给   你该怎么做       将其乘以下一个因子值并重复直到完成,您有一个明确的答案显示

现在,我知道如何使用这个方法,我不知道的是如何用我需要的值实际创建数组。我如何得到50的答案! “分解”成阵列的碎片?

2 个答案:

答案 0 :(得分:3)

通过将其分解为某些组成部分,您可以更好地实现这一目标。

您需要一种方法将整数转换为数字表示形式,因此使用单元测试实现方法:

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]
}

如果必须使用正确的数组而不是数组列表,则还需要担心要在multiply中分配的结果数组的大小。所以你需要一个方法,如:

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?
}

如果您开始实施这些功能,进行测试,并在遇到问题时回过头来回答具体问题,那么您可能会获得更多有用的答案。我没有给出任何上述实施,因为这是一个家庭作业问题,我认为你并不希望得到一个完整的解决方案。

答案 1 :(得分:1)

您可以更好地使用正确的数据类型,而不是将值存储在数组中。因此,您可以使用int而不是BigInteger

相关问题