对于阶乘最初的做法,是通过循环储存阶乘结果,然后输出。然而随着阶乘结果不断叠加,即便是long long 也无法满足其需求,因此便自然而然把储存目标放到数组中。
代码:
#include <iostream>
using namespace std;
int main()
{
int c,n,j,a[1000000],d,temp,i;
while(cin>>n)
{
a[0]=1;d=1;
for(i=2; i<=n; i++)
{
for(c=0,j=1;j<=d; ++j)
{
temp=a[j-1]*i+c;
a[j-1]=temp%10;
c=temp/10;
}
while(c)
{
a[++d-1]=c%10;
c/=10;
}
}
for(int k=d; k>=1; k--)
printf("%d",a[k-1]);
cout<<endl;
}
return 0;
}
代码解析:
代码的核心思路便是通过循环将阶乘结果按顺序储存到数组中,d代表每次循环完成后的位数,然后在下次运算时分别进行阶乘运算,再通过处理储存。如此可以保证阶乘结果完全储存在数组中。
注:随着阶乘数据加大,其结果将会极其大,不建议在验证时数据过大。