[Java] 藍橋杯BASIC-30 基礎練習 階乘計算
阿新 • • 發佈:2018-12-13
問題描述輸入一個正整數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]); } } }