输入N求N的阶乘的准确值。
Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120
当n=10000时,一个一个的乘会超时,就两个两个就乘。。。。
代码:
#include<cstdio>
int main()
{
int n;
scanf("%d",&n);
int ss[250000],geshu,yu,yuan;
geshu=1;ss[0]=1;
if (n%2)
{
for (int i=2;i<n;i+=2)
{
yu=0,yuan=geshu;
for (int j=0;j<geshu;j++)
{
if (j<yuan)
ss[j]=ss[j]*i*(i+1)+yu;
else
ss[j]=yu;
if (ss[j]>9)
{
yu=ss[j]/10;
ss[j]%=10;
if (j==geshu-1)
geshu++;
}
else
yu=0;
}
}
}
else
{
if (n>=2)
ss[0]=2;
for (int i=3;i<n;i+=2)
{
yu=0,yuan=geshu;
for (int j=0;j<geshu;j++)
{
if (j<yuan)
ss[j]=ss[j]*i*(i+1)+yu;
else
ss[j]=yu;
if (ss[j]>9)
{
yu=ss[j]/10;
ss[j]%=10;
if (j==geshu-1)
geshu++;
}
else
yu=0;
}
}
}
for (int i=geshu-1;i>=0;i--)
printf("%d",ss[i]);
printf("\n");
return 0;
}