2013年7月17日 星期三

[C]大數乘法 - N階乘

實作一個計算 N階乘(N ! = N×(N-1) ×…×2×1)的程式。
(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;
}

沒有留言:

張貼留言