输入N求N的阶乘的准确值。
Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120
题解:之前写过一个大数的阶乘问题,但是运行时间太久了,过不去。看了别人写的答案知道了要把结果分成许多段来存,输出的时候要注意一下格式。还有一点我很不明白,希望有人解惑,我定义MOD_的时候用1e8编译通不过,但是用100000000就可以通过编译。
#include<bits/stdc++.h>
using namespace std;
#define MOD_ 100000000
int main()
{
int n;
scanf("%d",&n);
long long int a[10000];
a[0]=1;
long long int m,t=0; //m为进位,t表示分成几段。
for(int i=1;i<=n;i++)
{
m=0;
for(int j=0;j<=t;j++)
{
a[j]=a[j]*i+m;
m=a[j]/MOD_;
a[j]=a[j]%MOD_;
}
if(m>0)
{
t++;
a[t]=m;
}
}
printf("%lld",a[t]);
for(int i=t-1;i>=0;i--)
{
printf("%08lld",a[i]);
}
return 0;
}
顺便把我的没有过的代码贴上吧。 #include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
char a[40000];
memset(a,0,sizeof(a));
a[0]=1;
int sum;
for(int i=1;i<=n;i++)
{
sum=0;
for(int j=0;j<40000;j++)
{
sum=sum+a[j]*i;
a[j]=sum%10;
sum=sum/10;
}
}
int k=39999;
while(a[k]==0)
{
k--;
}
for(int i=k;i>=0;i--)
{
printf("%d",a[i]);
}
return 0;
}