3484 - 又是阶乘
时间限制 : 1 秒
内存限制 : 128 MB
又是阶乘
小明每次都很高兴的说自己会做阶乘题,一个ACM的牛人看不下去了!说到你怎么可以这样牛!哼,哼,哼,他说那你知道大数的阶乘怎么算吗?记得不能超时啊!!做不出来我看你怎么嘚瑟!!
这下小明苦恼了!聪明的你可以忙小明解决吗??
输入不超过1000的整数n,输出n!=1*2*3*4*5*6*7*........*n;
题目输入
输入有多组数据n,当输入n=0结束;
题目输出
输出每一个n的阶乘;
输入/输出样例
输入格式
5 30 0
输出格式
120 265252859812191058636308480000000
C语言解答
#include<stdio.h> int main() { int a[10000]; int n,digit,temp; while(scanf("%d",&n) && n != 0) { a[0]=1; digit=1; for(int i=2; i<=n; i++) { int carry = 0; for(int j=1; j<=digit; ++j) { temp=a[j-1]*i+carry; a[j-1]=temp%10; carry=temp/10; } while(carry) { ++digit; a[digit-1]=carry%10; carry/=10; } } for(int k=digit; k>=1; --k) printf("%d",a[k-1]); printf("\n"); } return 0; }
C++解答
#include<cstdio> #include<string.h> #include<iostream> #include<algorithm> #include<stdlib.h> #include<time.h> #define MIN 1 #define MAX 3000 const int maxn=3000; int f[maxn]; using namespace std; int main() { int i,j,n; //freopen("in.txt","r",stdin); //freopen("tt1.txt","w",stdout); while(cin>>n) { if(n==0) break; memset(f,0,sizeof(f)); f[0]=1; for(i=2; i<=n; i++) { int c=0; for(j=0; j<maxn; j++) { int s=f[j]*i+c; f[j]=s%10; c=s/10; } } for(j=maxn-1; j>=0; j-- ) if(f[j]) break; for(i=j; i>=0; i--) cout<<f[i]; cout<<endl; } return 0; }