(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;
}
沒有留言:
張貼留言