階乘計算JAVA詳述

問題描述

    輸入一個正整數n,輸出n!的值。
    其中n!=1x2x3x…xn。
算法描述

    n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數a,A[0]表示a的個位,A[1]表示a的十位,依次類推。
    將a乘以一個整數k變爲將數組A的每一個元素都乘以k,請注意處理相應的進位。
    首先將a設爲1,然後乘2,乘3,當乘到n時,即得到了n!的值。
輸入格式
  輸入包含一個正整數n,n<=1000。
輸出格式
    輸出n!的準確值。
樣例輸入
    10
樣例輸出
    3628800
分析:數組
代碼

public class Main{

	protected static ArrayList A = new ArrayList();
	static {
		A.add(BigInteger.valueOf(1));//向數組添加1,邏輯大小爲1
	}
	
	public static synchronized BigInteger factorial(int x) {
		//i的初始值爲1,此循環用來給數組A存放i!的值
		for (int i = A.size(); i <= x; i++) {
			BigInteger L = (BigInteger) A.get(i-1);// 得到i-1索引處的值L  1  1  2  6  24  120....(L=(i-1)!)
			BigInteger N = L.multiply(BigInteger.valueOf(i));//N=L*i N是索引爲i處的值  1 2 6 24 120....(N=i!)
			A.add(N);//將i!添加進索引爲i的數組A中
		}
		return (BigInteger) A.get(x);//取出索引爲x的值,即x!; 代值計算很好理解的^V^
	}
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		int n=s.nextInt();
		System.out.print(factorial(n));
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章