我被分配编写一个基于以下代码的程序,可以显示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的答案! “分解”成阵列的碎片?
答案 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
。