PTA題目 6 10 階乘計算公升級版 答案 解析

2021-09-10 16:30:27 字數 1706 閱讀 1935

題目**:

題目內容:

函式介面定義:

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...