问题遇到的现象和发生背景
15:阶乘和
总时间限制: 1000ms 内存限制: 65536kB
描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=54321。
输入正整数N,输出计算结果S。
输入
一个正整数N。
输出
计算结果S。
样例输入
5
样例输出
153
来源
NOIP1998复赛 普及组 第二题
问题相关代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[100],h[100]={0};
int l;
for(int k=1;k<=n;k++)
{
for(int i=0;i<100;i++)
{
a[i]=0;
}
a[1]=1;
l=1;
for(int i=1;i<=k;i++)
{
for(int j=1;j<=l;j++)
{
a[j]=a[j]*i;
a[j]=a[j-1]/10+a[j];
a[j-1]=a[j-1]%10;
if(a[j]>=10&&j>=l)
l++;
}
}
for(int i=0;i<100;i++)
{
h[i]+=a[i]+h[i];
if(h[i]>=10)
{
h[i+1]++;
h[i]-=10;
}
}
}
bool f=false;
for(int i=99;i>=0;i--)
{
if(h[i]!=0)
f=true;
if(f==true)
cout<<h[i];
}
if(f==false)
cout<<0;
return 0;
}
运行结果及报错内容
输入:
5
输出:
3840
我的解答思路
套的求10000以内n的阶乘的代码
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[100000]={0};
a[1]=1;
int n;
cin>>n;
int l=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=l;j++)
{
a[j]=a[j]*i;
a[j]=a[j-1]/10+a[j];
a[j-1]=a[j-1]%10;
if(a[j]>=10&&j>=l)
l++;
}
}
for(int i=l;i>=1;i--)
cout<<a[i];
return 0;
}