(1) 請先試著看看,使用一般的 int 整數,最多可以實做到幾階乘?
(2) 實作一個支援大數運算(設定為可印出最高 1000位)的階乘程式,輸出 N!的值(N為一
輸入值,1<N<=200)。
SOLUTION CODE
#include <stdio.h> #include <stdlib.h> int main(int argc, char*argv[]) { int n, result[1000] = {0}, digit = 999, i, j; printf("請輸入 N\n >"); scanf("%d", &n); result[0] = 1; for(j = 1;j <= n;j++) { //檢查要做幾位數 digit = 999; while(result[digit] == 0) { digit--; } //進行乘法 //每個digit都抓出來乘 for(i = 0;i <= digit;i++) result[i] *= j; //處理各個digit進位的問題 for(i = 0;i <= digit;i++) { int k = 0; //偏移量,處理超過雙位數的問題 while(result[i+k] >= 10) { result[i+k+1] += result[i+k]/10; result[i+k] = result[i+k]%10; k++; } } } //檢查要印到幾位數 digit = 999; while(result[digit] == 0) { digit--; } do { printf("%d", result[digit]); digit--; }while(digit >= 0); printf("\n"); system("pause"); return 0; }
沒有留言:
張貼留言