演算法之階乘
阿新 • • 發佈:2018-12-17
問題描述 一個整數n的階乘可以寫成n!,它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13!就已經比較大了,已經無法存放在一個整型變數中;而35!就更大了,它已經無法存放在一個浮點型變數中。因此,當n比較大時,去計算n!是非常困難的。幸運的是,在本題中,我們的任務不是去計算n!,而是去計算n!最右邊的那個非0的數字是多少。例如,5! = 12345 = 120,因此5!最右邊的那個非0的數字是2。再如:7! = 5040,因此7!最右邊的那個非0的數字是4。請編寫一個程式,輸入一個整數n(n<=100),然後輸出n! 最右邊的那個非0的數字是多少。 輸入格式:輸入只有一個整數n。 輸出格式:輸出只有一個整數,即n! 最右邊的那個非0的數字。 樣例輸入:6 樣例輸出:2 程式碼實現:
#include<stdio.h> using namespace std; const int Data = 10; int a[1000]; int main() { int n, r = 0; scanf("%d", &n); a[0] = 1; int j = 0; while (n--){ for (int i = 0; i <= j; i++){ a[i] = a[i] * (n + 1) + r; r = a[i] / Data; a[i] %= Data; } if (r){ j++; a[j] = r; r = 0; } } for (j = 0;; j++) if (a[j] % 10) { printf("%d", a[j] % 10); break; } printf("\n"); return 0; }
執行結果: