我是java的初学者。 我有作业写一个完整的程序,计算使用数组的50阶乘。 我不能使用biginteger之类的任何方法。 我只能使用数组,因为我的教授希望我们理解背后的逻辑,我猜... 但是,他并没有真正教会我们数组的细节,所以我在这里非常困惑。在java中使用数组计算50的阶乘
基本上,我试图划分大数字,并将其放入数组插槽。因此,如果第一个数组获得235,我可以将其分开并提取数字并将其放入一个数组插槽中。然后,放置下一个数组插槽。并重复这个过程,直到我得到结果(这是50阶乘,这是一个巨大的数字..)
我试图理解背后的逻辑是什么,但我真的无法弄清楚..到目前为止我有这个想法。
import java.util.Scanner;
class Factorial
{
public static void main(String[] args)
{
int n;
Scanner kb = new Scanner(System.in);
System.out.println("Enter n");
n = kb.nextInt();
System.out.println(n +"! = " + fact(n));
}
public static int fact(int n)
{
int product = 1;
int[] a = new int[100];
a[0] = 1;
for (int j = 2; j < a.length; j++)
{
for(; n >= 1; n--)
{
product = product * n;
a[j-1] = n;
a[j] = a[j]/10;
a[j+1] = a[j]%10;
}
}
return product;
}
}
不过,这并不表明我的50 阶乘它显示我作为0的结果,所以很显然,它不工作。
我想使用一种方法(事实()),但我不知道这是正确的方法。 我的教授提到有关使用operator /和%将数字重复分配给数组的下一个插槽。 所以我试图用这个作业。
有没有人有这个作业的想法? 请帮帮我!
对于令人困惑的指令感到抱歉...我也很困惑,所以请原谅我。
FYI:50阶乘是30414093201713378043612608166064768844377641568960512000000000000
提防[整数除法(http://stackoverflow.com/questions/7220681/division-of-integers-in-java) – Ian
提示:你需要做乘法,当您使用笔就像和纸张。举例来说,4! = 24,所以你的数组将是{2,4}。然后为5!,你需要计算4 * 5,它给你0和2的进位,然后2 * 5 + 2给你2和进位1,所以你的新结果是{1,2, 0}。 –