#include <algorithm>
#include <iostream>
using namespace std;
char fuck[501][1200];
int ay[501]={0};
void multiplication(int shit)
{
int digit[3]={0},k,i,j=0,jinwei,t_shit=shit;
while(t_shit)
{
digit[j]=t_shit%10;
t_shit=t_shit/10;
j++;
}
for(k=0;k<1200;++k)
fuck[shit][k]='0';
for(k=0;k<j;++k)
{
jinwei=0;
for(i=0;i<=ay[shit-1];++i )
{
int temp=(fuck[shit-1][i]-48)*digit[k]+jinwei;
jinwei=0;
if(temp>=10)
{
jinwei=temp/10;
fuck[shit][i+k]+=(temp%10);
}
else
fuck[shit][i+k]+=(temp);
if((fuck[shit][i+k]-48)>=10)
{
jinwei+=((fuck[shit][i+k]-48)/10);
fuck[shit][i+k]=(fuck[shit][i+k]-48)%10+48;
}
ay[shit]=i+k;
if( (jinwei)&&(i==ay[shit-1]) )
{
fuck[shit][i+k+1]+=jinwei;
ay[shit]=i+k+1;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int i,index,yy;
fuck[0][0]='1';ay[0]=0;
fuck[1][0]='1';ay[1]=0;
fuck[2][0]='2';ay[2]=0;
fuck[3][0]='6';ay[3]=0;
fuck[4][0]='4';fuck[4][1]='2',ay[4]=1;
for(i=5;i<501;++i)
multiplication(i);
while(cin>>i)
{
yy=0;
cout<<i<<'!'<<endl;
for(index=ay[i];index>=0;--index)
{
yy++;
cout<<fuck[i][index];
if( (yy%80==0)&&(yy!=(ay[i]+1)) )
cout<<endl;
}
cout<<endl;
}
return 0;
}
自己写的求500以内的所有数的阶乘,
只要输入所要求的数就可以给出结果。
^_^