2010年3月20日 星期六

Problem 568 Just the Facts,階乘的尾數

此題是要求出 n! 從右邊算來最後一個不是 0 的數字。

我們要建立一個 10000 格的整數陣列,以放每一個階乘的結果。但是如果只存個位數,可能在數字上會有誤差,所以每次的結果,都以 10000 以下的數字來存放,以下為關鍵程式碼:
int Factorial[10001] = {0};
Factorial[0] = 1;
for (i = 1; i <= 10000; i ++)
{
Factorial[i] = Factorial[i - 1] * i;
while (Factorial[i] % 10 == 0)
Factorial[i] /= 10;
Factorial[i] %= 100000;
}

建立表後,只須將內容值 mod 10 後印出即可:
while (scanf("%d", &n) == 1)
printf("%5d -> %d\n", n, Factorial[n]%10);

By David.K

p568題目連結
回ACM題庫目錄
回首頁

沒有留言: