Sunday, February 27, 2011

623 - 500!


#include<iostream>
#include<cstring>

#define M 10000
using namespace std;
char fact[1001][M];
void longFact(int n,char[]);
void strRev(char str[]);
int main()
{
    char num[M];
    register int i,n;
    //freopen("in.txt","r",stdin);
    longFact(1000,num);
    for(i=0;i<=1000;i++)strRev(fact[i]);
    while(scanf("%d",&n)==1)
        printf("%d!\n%s\n",n,fact[n]);
    return 0;
}
void longFact(int n,char num[])
{
    int i,j,k,c,m;
    for(i=0;i<M;i++)num[i]='\0';
    num[0]='1';
    strcpy(fact[0],"1");
    for(i=1;i<=n;i++)
        {
            c=0,k=0;
            for(j=0;num[j];j++)
                {
                    m=(num[j]&15)*i+c;
                    num[k++]=(m%10)|48;
                    c=m/10;
                }
            while(c)
                {
                    num[k++]=(c%10)|48;
                    c=c/10;
                }
            strcpy(fact[i],num);
        }
}
void strRev(char str[])
{
    int i,len=strlen(str),n=len/2;
    for(i=0;i<n;i++)
    {
        str[i]=str[i]^str[len-i-1];   
        str[len-i-1]=str[i]^str[len-i-1];
        str[i]=str[i]^str[len-i-1];
    }
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.