题目1076:N的阶乘
时间限制:3 秒
内存限制:128 兆
特殊判题:否
提交:4136
解决:1369
-
题目描述:
-
输入一个正整数N,输出N的阶乘。
-
输入:
-
正整数N(0<=N<=1000)
-
输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
-
样例输入:
-
4 5 15
-
样例输出:
-
24 120 1307674368000
#include <stdio.h> #include <stdlib.h> #include <memory.h> //大数乘法 struct bigInteger { int digit[3000]; int size; void init()//初始化 { size = 0; memset(digit,0,sizeof(digit)); } void set(int x)//设置 { init(); do { digit[size++]=x%10; x/=10; }while(x!=0); } bigInteger operator * (int x ) const{//乘法运算符 bigInteger ret; ret.init();//设置初始 int carry=0;//进位 int i; for(i=0;i<size;i++) { int tmp=x*digit[i]+carry; carry=tmp/10; tmp%=10; ret.digit[ret.size++]=tmp;//保存该位数字 } while(carry!=0) { ret.digit[ret.size++]=carry%10; carry/=10; } return ret;//返回结果 } void output() { int i; for(i=size-1;i>=0;i--) printf("%d",digit[i]); printf("\n"); } }a; int main(void) { int N; int i; while(scanf("%d",&N)!=EOF) { a.set(1); for(i=1;i<=N;i++) a=a*i; a.output(); } return 0; } /************************************************************** Problem: 1076 User: ranchothu Language: C++ Result: Accepted Time:1530 ms Memory:1032 kb ****************************************************************/