2015-10-15 52 views
1

我被分配編寫一個基於下列代碼的程序,它可以顯示50階乘。由於原始類型不適合如此龐大的數字,因此我被要求使用一個整數數組並且使用單個插槽作爲大數的「部分」。這是我一直在考慮編寫代碼周圍...顯示50!在Java中

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 7 2 0上攜帶一個,保持兩個組在哪裏。

產品[I]/10會給你什麼隨身攜帶的產品[I]%10會給 你怎麼保持 乘這個由下一因素值和重複,直到完成,你有一個明確的答案顯示

現在,我知道如何使用此方法,我不知道如何實際創建具有所需值的數組。我如何得到50的答案! 「分解」成數組的片斷?

+0

您可以使用'new int [size]'創建一個數組。這給你一個全零的數組。你應該從代表'1'的數組開始,然後有一個實現乘法的方法。你知道如何獲得一個全零的數組,並使它代表上述方法中的數字'1'? – RealSkeptic

+0

我可以,但程序本身應該在哪裏完成? –

+0

在「事實」方法中。在任何你看到'產品'的地方,都應該用數組替換它。如果你看到'產品'上的操作員,他們需要用一種方法來替換。你看到'int'返回的地方應該用'int []'代替,並且你看到一個打印的整數,你應該有一個方法可以正確地打印數組。 – RealSkeptic

回答

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

如果你必須使用正確的陣列,而不是例如數組列表,你還需要擔心導致陣列內多次分配的大小。所以你需要一個方法,如:

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

不是將值存儲在數組中,而是可以更好地使用正確的數據類型。因此,您可以使用BigInteger而不是使用int

+1

嗯,這是一個家庭作業問題。我相信使用數組是一個約束。 – RealSkeptic

+0

這就是我會做的,但我被要求使用數組 –