void
print_factorial
(int n)
if(n<0)
//以上是兩個例外情況
int r[
3000];
//用於存放結果
r[0]
=1;for
(int i =
1;i<
3000
;i++
)//將陣列初始化為-1,方便判斷邊界
int t=
1,i;
//t代表結果的位數,一開始是1
for(
int j=n;j>
1;j--
) i=1;
//i存放這次迴圈後結果的位數
while
(i)//因為前面把每一位都初始化成了-1,所以需要進到更高一位的時候,需要把那一位先還原成0
r[i]+=
(int
)(r[i-1]
/10);
//進製
r[i-1]
%=10;
i++;//計算位數
}else
if(r[i]
>=0)
else}}
// print
for(
;t>
0;t--
)}
最開始的想法是用double陣列拼接,這樣陣列長度有10就足夠了(1000!大約是10^2500多),但是不好確定double的上限,而且浮點運算有一點誤差,沒辦法接受.
然後就是現在這樣陣列每個元素存放一位,採用滿十進一的方式計算. 這樣做最大的問題是不好確認邊界.
c宣告陣列變數的時候必須要給定固定的陣列長度,因此要在一開始就把陣列長度設定到大於2600,這樣在下面迴圈的時候很難在恰當的時候退出迴圈.如果當前位數字為0視做邊界,肯定是不恰當的.
因此我採用的是宣告陣列後,手動將每個元素賦值為-1這樣不會出現的數字.然後需要進到新的一位的時候再重置為0.
進製的時候還有乙個問題就是該如何結束迴圈.有兩個思路,乙個是用之前的位數t+現在的被乘數的位數作為迴圈次數,很明顯,兩個小於10的數字相乘肯定不會大於100.但是這樣依舊不能省掉臨時變數i,也不能解決邊界的問題.
另乙個辦法是while,判斷條件設為乙個變數,當到達邊界的時候將變數設為0以退出迴圈.很難說哪個更好一點.
越是在這個時候,越能理解為什麼說python適合新手了.
6 10 階乘計算公升級版 20 分
本題要求實現乙個列印非負整數階乘的函式。函式介面定義 void print factorial const int n 其中n是使用者傳入的引數,其值不超過1000。如果n是非負整數,則該函式必須在一行中列印出n 的值,否則列印 invalid input 裁判測試程式樣例 include void...
6 10 階乘計算公升級版 20 分
本題要求實現乙個列印非負整數階乘的函式。函式介面定義 void print factorial const int n 其中n是使用者傳入的引數,其值不超過1000。如果n是非負整數,則該函式必須在一行中列印出n 的值,否則列印 invalid input 裁判測試程式樣例 include void...
6 10 階乘計算公升級版 20分
基礎程式設計題目集 6 10 階乘計算公升級版 20分 本題要求實現乙個列印非負整數階乘的函式。函式介面定義 void print factorial const int n 其中n是使用者傳入的引數,其值不超過1000。如果n是非負整數,則該函式必須在一行中列印出n 的值,否則列印 invalid...