我是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}。 –