-
题目描述:
-
输入一个正整数N,输出N的阶乘。
-
输入:
-
正整数N(0<=N<=1000)
-
输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
-
样例输入:
-
4 5 15
-
样例输出:
-
24 120 1307674368000
-
来源:
-
2006年清华大学计算机研究生机试真题
/*与九度OJ 1198 相比较,使用了相同的套路*/ #include <stdio.h> using namespace std; struct bigInteger{ int digit[1002]; int size; //初始化结构体 void init() { for(int i=0;i<1002;i++) { digit[i] = 0; } size = 0; } //用一个小整数设置高精度整数 void set(int x) { init(); //先进行初始化 do{ 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("\n"); } //重载*运算符 bigInteger operator * (int x) const { bigInteger ret; //返回的结构体变量 ret.init(); //初始化 int carry = 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; } }; bigInteger a; int main() { int n; while(scanf("%d", &n) != EOF) { a.init(); a.set(1); //a初始化为1,即1存入高精度结构中 for(int i=1;i<=n;i++) { //注意不能从0开始循环 a = a*i; } a.output(); } return 0; }