消息关闭
    暂无新消息!
题目描述
求1+2!+3!+...+N!的和 

输入
正整数N(N〈=20)

输出
1+2!+3!+...+N!的和 (结果为整数形式)

样例输入
3样例输出
9提示
#include<iostream>
using namespace std;
int main()
{
    int N,i,j=1;
    unsigned long int sum=0;
    cin>>N;
    for(i=1;i<=N;i++)
    {
        j=j*i;
        sum=sum+j;
    }
    cout<<sum<<endl;
    return 0;

}

4个回答

︿ 3
20!=2432902008176640000,是个19位数,所以j和sum都需要用unsigned long long int
unsigned long int可能是32位或64位,unsigned long long int至少是64位
︿ 1

#include<iostream>
using namespace std;
int main()
{
    int N,i,k,j=1;
    unsigned long int sum=0;
    cin>>N;
    for(i=1;i<=N;i++)
    {
      for(k=1;k<=i;k++){
        j=j*k;
      }
        sum=sum+j;
    }
    cout<<sum<<endl;
    return 0;

}

少了一层循环
︿ 0
才20, 直接递归好了, 数值有点大,使用long long
typedef long long LL;
LL d[21];
LL fact(int n){
    if(n==1) return 1;
    LL &ans=d[n];
    if(!ans) ans =n * fact(n-1);
    return ans;
}
int main()
{
    int n;
    while(cin>>n && n){
        LL sum =0;
        for(int i=n;i;i--) sum +=fact(i);
        cout<<sum<<endl;
    }
    return 0;
}