題目**:
題目內容:
函式介面定義:
void print_factorial ( const int n );
其中n是使用者傳入的引數,其值不超過1000。如果n是非負整數,則該函式必須在一行中列印出n!的值,否則列印「invalid input」。
裁判測試程式樣例:
#include void print_factorial ( const int n );
int main()
/* 你的**將被嵌在這裡 */
輸入樣例:
15輸出樣例:
1307674368000
我一開始遇到這道題的時候是沒啥想法的,唯一能想到的就是用演算法模擬豎式計算,達到大數乘法的效果,但是下手比較很難,其實接下來介紹的演算法確實可以看成模擬豎式計算的,但是和一般的豎式計算有所不同,並且根據實際情況,不一定要模擬得那麼標準。
void
print_factorial
(const
int n)
; number[0]
=1;int right =
0, num, carry=0;
for(
int n =
2; n <= n;
++n)
while
(carry)
}for
(int r = right ; r >=0;
--r)
}}
flowchart寫的流程圖:
上面那個圖可能效果不是太好
mermaid 語法寫的流程圖:
其實關鍵是外面的那個大迴圈,用word做的流程圖(上圖的外層迴圈部分,已判斷為n為大於0的情況):
對應的**片段:
int number[
10000]=
; number[0]
=1;int right =
0, num, carry=0;
for(
int n =
2; n <= n;
++n)
while
(carry)
}for
(int r = right ; r >=0;
--r)
定義的變數:number[0]=1;n;num;r;carry=0;right=0
自己的理解:
前面已經說過,這個可以理解成豎式計算,但是與一般的豎式計算不同,那就是每一步乘的數n不必拆成個位,十位等來計算,如下,假設已得結果32430725,n=13:
一般的豎式大家都會,為了說得更加清楚一點,下面詳細說明程式的各個部分對應豎式運算的哪幾個部分:
話不多說了,相信大家仔細看**能看懂,祝大家學習愉快,感謝大家的時間。
6 10 階乘計算公升級版
本題要求實現乙個列印非負整數階乘的函式。函式介面定義 void print factorial const int n 其中n是使用者傳入的引數,其值不超過1000。如果n是非負整數,則該函式必須在一行中列印出n 的值,否則列印 invalid input 裁判測試程式樣例 include void...
刷題 PTA 6 10 階乘計算公升級版
要求 實現乙個列印非負整數階乘的函式 n是使用者傳入的引數,其值不超過1000。如果n是非負整數,則該函式必須在一行中列印出n 的值,否則列印 invalid input 1 include 2 3void print factorial const intn 4int main 10void pr...
PTA 6 10 階乘計算公升級版 20分
題目位址 本題要求實現乙個列印非負整數階乘的函式。void print factorial const int n 其中n是使用者傳入的引數,其值不超過1000。如果n是非負整數,則該函式必須在一行中列印出n 的值,否則列印 invalid input include void print fact...