//大阶乘函数,只能算到11,大家来看看问题出在哪里吧
#include<iostream>
#include<cstring>
using namespace std;
string zhuan(string a)//string旋转
{
string temp;
int i,siz=a.size();
for(i=siz-1;i>-1;i--)
{
temp+=a[i];
}
return temp;
}
string tiem(string a,string s);
int main()
{
string a="0088263";
int shu,i;
cin>>shu;
switch(shu)/////////////////////////////////////////////////////
{
case 2:
cout<<2;
return 0;
case 3:
cout<<6;
return 0;
case 4:
cout<<24;
return 0;
case 5:
cout<<120;
return 0;
case 6:
cout<<720;
return 0;
case 7:
cout<<5040;
return 0;
case 8:
cout<<40320;
return 0;
case 9:
cout<<362880;
return 0;
case 10:
cout<<"3628800";
return 0;
}//////////////////////////////////////////////////////////////
for(i=11;i<=shu;i++)//阶乘
{
string num="";
int s=i;
while(s%10==0)
{
s/=10;
a+='0';
}
while(s>0)
{
char r=s%10+48;
num+=r;
s/=10;
}
a=tiem(a,num);
}
a=zhuan(a);
cout<<a<<endl;
}
string tiem(string a,string s)//大数相乘函数
{
int digit=0,i,j,yu=0,asiz=a.size(),ssiz=s.size();
char ans[10010];
while(a[digit]=='0')
{
ans[digit]='0';
digit++;
}
for(j=0;j<ssiz;j++)//正片
{
for(i=digit;i<asiz;i++)
{
char d=(a[i]-48)*(s[j]-48)+yu;
yu=d/10;
d=d%10+'0';
if(ans[i+j]>'0')
{
d-='0';
}
ans[i+j]+=d;
cout<<d<<" "<<ans[i+j]<<endl;
}
if(yu>0)
{
ans[asiz+j]+=yu+'0';
}
}
if(yu>0)
{
ans[asiz+ssiz]+=yu+'0';
}
for(asiz=sizeof(ans)/sizeof(ans[0]),i=0;i<asiz;i++)
{
if(ans[i]>'9')
{
ans[i]-='0';
yu=ans[i]/10;
ans[i+1]+=yu;
ans[i]=ans[i]%10+'0';
}
}
if(ans[asiz]<'0')
{
ans[asiz]+='0';
}
cout<<endl<<ans<<endl;
string sans=ans;
return sans;
}
//丢人小吧
#include<iostream>
#include<cstring>
using namespace std;
string zhuan(string a)//string旋转
{
string temp;
int i,siz=a.size();
for(i=siz-1;i>-1;i--)
{
temp+=a[i];
}
return temp;
}
string tiem(string a,string s);
int main()
{
string a="0088263";
int shu,i;
cin>>shu;
switch(shu)/////////////////////////////////////////////////////
{
case 2:
cout<<2;
return 0;
case 3:
cout<<6;
return 0;
case 4:
cout<<24;
return 0;
case 5:
cout<<120;
return 0;
case 6:
cout<<720;
return 0;
case 7:
cout<<5040;
return 0;
case 8:
cout<<40320;
return 0;
case 9:
cout<<362880;
return 0;
case 10:
cout<<"3628800";
return 0;
}//////////////////////////////////////////////////////////////
for(i=11;i<=shu;i++)//阶乘
{
string num="";
int s=i;
while(s%10==0)
{
s/=10;
a+='0';
}
while(s>0)
{
char r=s%10+48;
num+=r;
s/=10;
}
a=tiem(a,num);
}
a=zhuan(a);
cout<<a<<endl;
}
string tiem(string a,string s)//大数相乘函数
{
int digit=0,i,j,yu=0,asiz=a.size(),ssiz=s.size();
char ans[10010];
while(a[digit]=='0')
{
ans[digit]='0';
digit++;
}
for(j=0;j<ssiz;j++)//正片
{
for(i=digit;i<asiz;i++)
{
char d=(a[i]-48)*(s[j]-48)+yu;
yu=d/10;
d=d%10+'0';
if(ans[i+j]>'0')
{
d-='0';
}
ans[i+j]+=d;
cout<<d<<" "<<ans[i+j]<<endl;
}
if(yu>0)
{
ans[asiz+j]+=yu+'0';
}
}
if(yu>0)
{
ans[asiz+ssiz]+=yu+'0';
}
for(asiz=sizeof(ans)/sizeof(ans[0]),i=0;i<asiz;i++)
{
if(ans[i]>'9')
{
ans[i]-='0';
yu=ans[i]/10;
ans[i+1]+=yu;
ans[i]=ans[i]%10+'0';
}
}
if(ans[asiz]<'0')
{
ans[asiz]+='0';
}
cout<<endl<<ans<<endl;
string sans=ans;
return sans;
}
//丢人小吧