6 10 階乘計算公升級版 20分

2021-10-09 18:47:23 字數 1202 閱讀 8470

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