P1009 [NOIP1998 普及组] 阶乘之和

题目描述

用高精度计算出 S=1!+2!+3!+⋯+n!(n≤50)。

其中 ! 表示阶乘,定义为 n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=120。

输入格式

一个正整数 n。

输出格式

一个正整数 S,表示计算结果。

输入输出样例

输入

3

输出 

9

蒟蒻在厕所蹲了半小时后也是写出了代码,但不对,先康康:

#include
using namespace std;
int a[2000],c[2000];
void op(int a,int m)
{
	int z=0; 
	for(int i=1;i<=1000;i++)
	{
		a[i]=a[i]*m+z; 
		z=a[i]/10;
		a[i]%=10;
	}
}
void xp(int* a,int* c)
{
    int z=0;
	for(int i=1;i<=1000;i++)
	{
		c[i]=a[i]+c[i]+z;
		z=c[i]/10;
		c[i]=c[i]%10;
   } 
}
int main()
{
	int N;
	cin>>N;
    a[1] = 1;
	for(int i=1;i<=N;i++)
	{
		op(a,i);
		xp(a,c);
	}
	bool flag=0;
	for(int i=1000;i>0;i--)
	{
		if(c[i]!=0)
		{
			flag=1;
		}
		if(flag==1)
		{
			cout<

然后,dalao们猜猜咋了?

P1009 [NOIP1998 普及组] 阶乘之和_第1张图片

#include
using namespace std;
int a[2000],c[2000];
void op(int* a,int m)
{
	int z=0; 
	for(int i=1;i<=1000;i++)
	{
		a[i]=a[i]*m+z; 
		z=a[i]/10;
		a[i]%=10;
	}
}
void xp(int* a,int* c)
{
    int z=0;
	for(int i=1;i<=1000;i++)
	{
		c[i]=a[i]+c[i]+z;
		z=c[i]/10;
		c[i]=c[i]%10;
   } 
}
int main()
{
	int N;
	cin>>N;
    a[1] = 1;
	for(int i=1;i<=N;i++)
	{
		op(a,i);
		xp(a,c);
	}
	bool flag=0;
	for(int i=1000;i>0;i--)
	{
		if(c[i]!=0)
		{
			flag=1;
		}
		if(flag==1)
		{
			cout<

这是对的······没有*就不是数组·····然后就完了。AC

P1009 [NOIP1998 普及组] 阶乘之和_第2张图片

你可能感兴趣的:(c#,数据结构,c语言,c++,开发语言)