3484 - 又是阶乘

通过次数

0

提交次数

0

时间限制 : 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;
}