2548 - [语言过关]求阶乘和

求s=1!+2!+…n!。

输入格式

输入只有一行,为正整数n(0<n<20)。

输出

输出只有一行,为s的值

样例输入

2

样例输出

3

题目输入

题目输出

输入/输出样例

题目输入


                

题目输出


                

C语言解答

#include<stdio.h>

int main()
{
	int n,i;
	long int a,s;
	while(~scanf("%d",&n))
	{
		a=1;
		s=0;
		for(i=1;i<=n;i++) 
		{ 
           a*=i; 
           s+=a; 
		} 
	 printf("%ld\n",s);
	}
	return 0;
}

C++解答

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=3000;
long long jc[N]={0},ans[N]={0};
long long len1=1,len2=1;
int n;

void add()
{
	int len=max(len1,len2);
	for(int i=1;i<=len;i++)
	ans[i]+=jc[i];
	for(int i=1;i<=len;i++)
	{
		ans[i+1]+=ans[i]/10;
		ans[i]=ans[i]%10;
	}
	if(ans[len+1]!=0)
	len++;
	len2=len;
}

void mul(int i)
{
	len1=1;
	for(int j=1;j<=2999;j++)
	jc[j]=0;
	jc[1]=1;
	for(int j=1;j<=i;j++)
	{
	
	for(int l=1;l<=len1;l++)
	jc[l]=jc[l]*j;
    
	for(int l=1;l<=len1;l++)
	{jc[l+1]+=jc[l] / 10;
	jc[l]=jc[l]%10;
	}
	if(jc[len1+1]!=0)
	len1++;
	}
    add();
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	mul(i);
	for(int i=len2;i>=1;i--)
	cout<<ans[i];
	cout<<endl;
	return 0;
}
时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题