l045: 階乘溢位偵測(110-3)
標籤 : 萊恩盃
通過比率 : 2人/3人 ( 67% ) [非即時]
評分方式:
Tolerant

最近更新 : 2022-10-29 22:19

內容

階乘運算可視為一個函數:
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
1
範例輸出 #1
4
範例輸入 #2
5
範例輸出 #2
9
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (25%): 1.0s , <1K
公開 測資點#1 (25%): 1.0s , <1K
公開 測資點#2 (25%): 1.0s , <1K
公開 測資點#3 (25%): 1.0s , <1K
提示 :
標籤:
萊恩盃
出處:
南台科技大學資工系 110-03 [管理者: zero(管理員) ]


編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」