1. 程式人生 > >[Java] 藍橋杯BASIC-30 基礎練習 階乘計算

[Java] 藍橋杯BASIC-30 基礎練習 階乘計算

問題描述輸入一個正整數n,輸出n!的值。其中n!=1*2*3*…*n。演算法描述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

package base30;

import java.util.Scanner;

public class Main {
    static final int MAX = 10000;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.close();
        int[] A = new int[MAX + 1];
        for (int i = 0; i < A.length; i++) {
            A[i] = 0;
        }
        A[0] = 1;
        int r = 0;
        for (int i = 2; i <= n; i++) {
            for (int j = 0; j < MAX; j++) {
                int temp = A[j] * i + r;
                r = temp / 10;
                A[j] = temp % 10;
            }
        }

        int m = MAX;
        while (A[m--] == 0 && m >= 0) ;
        for (int i = m + 1; i >= 0; i--) {
            System.out.print(A[i]);
        }
    }
}