本題要求實現打印非負整數階乘,其中N
是用戶傳入的參數,其值不超過1000。若是N
是非負整數,則該函數必須在一行中打印出N
!的值,不然打印「Invalid input」。編程
每一個輸入包含一個測試用例,第1行輸入N。數組
在一行中輸出階乘結果或「Invalid input」函數
15測試
1307674368000spa
#include <stdio.h> /** * 基礎編程題目集-6-10 階乘計算升級版 */ void printFactorial ( const int N ); int main(int argc, char *argv) { int N; scanf("%d", &N); printFactorial(N); return 0; } void printFactorial ( const int N ) { // 存放結果積 int result[2600]; result[0] = 1; // 結果積長度,初始爲1 int index = 1; // 結果積的定位下標 int resultIndex; if (N < 0) { printf("Invalid input"); } else if (0 == N) { printf("%d", 1); } else { for (int i = 1; i <= N; i++) { // 餘數 int remainder = 0; for (resultIndex = 0; resultIndex < index; resultIndex++) { remainder += result[resultIndex] * i; if (remainder >= 10) { result[resultIndex] = remainder % 10; remainder /= 10; } else { result[resultIndex] = remainder; remainder = 0; } } /** * 判斷最後一次乘法(最高位)的結果是否產生餘數 */ if(remainder != 0) { result[resultIndex] = remainder; } else { resultIndex -= 1; } index = resultIndex + 1; } /** * 打印result數組即乘積結果 */ for(int i = resultIndex; i >-1 ; i--) { printf("%d", result[i]); } } }