王道機試験練習——高精度Nの階乗


王道機試験練習——高精度Nの階乗
タイトルの説明
正の整数Nを入力し、Nの乗算を出力します.入力:正整数N(0<=N<=1000)出力:入力は複数組のデータを含む可能性があり、各組の入力データに対して、Nの階乗を出力する
テーマを考える
この例では、入力されたデータは大きくないが、計算結果は非常に大きい(1000!)可能性があるため、高精度整数を用いて計算を完了する必要がある.この例に係る高精度演算は、高精度乗算である.
コード#コード#
#include
#include
#include
struct bigInteger {
	int digit[1000];
	int size;
	void init() {//   
		for (int i = 0; i < 1000; i++) digit[i] = 0;
		size = 0;
	}
	void set(int x) {//             
		init();
		do {//    4            digit 
			digit[size++] = x % 10000;
			x /= 10000;
		} while (x != 0);
	}
	void output() {//  
		for (int i = size - 1; i >= 0; i--) {
			if (i != size - 1) printf("%04d", digit[i]);
			else printf("%d", digit[i]);
		}
		printf("
"
); } bigInteger operator*(int x) const {// bigInteger ret;// ret.init();// int carry = 0;// 0 for (int i = 0; i < size; i++) { int tmp = x * digit[i] + carry; carry = tmp / 10000;// tmp %= 10000;// ret.digit[ret.size++] = tmp; } if (carry != 0) {// ret.digit[ret.size++] = carry;// } return ret;// } }a; int main() { int n; while (scanf("%d", &n) != EOF) { a.init(); a.set(1); for (int i = 1; i <= n; i++) { a = a * i;// } a.output();// a } return 0; }