階乘運算可視為一個函數:
f(n) = n! = 1*2*...*(n-1)*n = n*f(n-1),其中 n ≥ 0 為自然數。由 1 開始依序由小到大連續乘,並定義初始條件 f(0) = 0! =1。在此定義下,我們觀察到,階乘數值增加非常快速。例如,比較 f(5) = 5! =120 與f(10) = 10! = 3,628,800,當 n 由 5 增加到 10 變 2 倍時,階乘值已變為 f(10)。
f(5)=30,240 倍。由於電腦中所使用的整數位數有限,因此,電腦在計算階乘時常發生「溢位 Overflow」問題。
若以 K 位數的十進位「非負」整數型態 "Decimal_K" 計算階乘 f(n) = n!,由於 "Decimal_K" 能表示的整數範圍為 0~(10K - 1)的整數,因此,若階乘數值超出 (10K
- 1),則會發生計算溢位的錯誤。請撰寫程式,在輸入 K 值情況下,找出當 n 多大時,
以 "Decimal_K" 的十進位「非負」整數型態作階乘 f(n) 計算,會「首次」發生溢位。
舉例來說:
(1) 給定 K = 1,"Decimal_1" 的值域為 [0~9],則當 n = 4 時 f(4) = 4! =24 會首次發生溢位;
(2) 給定 K = 5,"Decimal_5" 的值域為 [0~99,999],則當 n = 9 時 f(9) =9! = 362,880 會首次發生溢位。
輸入 1 個正整數 K,其中 K ≤ 50。
輸出 f(n)=n! 階乘計算首次發生溢位時的數值 n。
1
4
5
9
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
沒有發現任何「解題報告」 |