东方博宜【基础】1296:求1!+2!+3!+4!+...+n!

1296. 求1!+2!+3!+4!+...+n!

问题描述

请求出 1!+2!+3!+4!+...+n!,请注意,n≤50 。

n!=n∗(n−1)∗(n−2)∗...∗1 ,如:5!=5∗4∗3∗2∗1=120。

输入

请输入一个整数 n(n≤50)。

输出

输出求和的结果。

样例

输入
10
输出
4037913

语言 C++

代码:

#include <bits/stdc++.h>

#include<string>

#include<algorithm>

using namespace std;

string ch(string r,int q){

        int t=0,i,j,d,a[32767]={},b[32767]={},c[32767]={},e[32767]={};

        int l,l1; string s,s1,result;

        s = r; s1 = to_string(q);

        l=s.size(); l1=s1.size();

        for(i=0;i<=l-1;i++){

               a[i]=s[l-1-i]-'0';

        }

        for(i=0;i<=l1-1;i++){

                b[i]=s1[l1-1-i]-'0';

         }

        for(i=0;i<=l-1;i++){

                 for(j=0;j<=l1-1;j++){

                        c[i+j]+=a[i]*b[j];

                        c[i+j+1]+=c[i+j]/10;

                        c[i+j]=c[i+j]%10;

                }

         }

        d=l+l1;

        for(i=d;i>=0;i--){

                if(c[i]==0&&d>=1){

                        d--;

                 }

                else{

                        break;

                }

        }

        for(i=d;i>=0;i--){

                result+=char(c[i]+'0');

         }

        return result;

}

string dh(string f,string r){

        int i,l,l1,a[32767]={},b[32767]={},c[32767],d,t=0;

        string s,s1,result; s=f; s1=r; l=s.size();

        l1=s1.size();

         d=max(l,l1);

        for(i=0;i<=l-1;i++){

                 a[i]=s[l-1-i]-'0';

        }

         for(i=0;i<=l1-1;i++){

                 b[i]=s1[l1-1-i]-'0';

         }

        for(i=0;i<=d-1;i++){

                c[i]=(a[i]+b[i]+t)%10;

                t=(a[i]+b[i]+t)/10;

        }

         if (t==1){

                cout<<1;

        }

        for(i=d-1;i>=0;i--){

                result += char(c[i]+'0');

        }

        return result;

}

int main(){

        int i,n,j; string r,s;

        cin>>n;

         for(i=1;i<=n;i++){

                r="1";

                for(j=1;j<=i;j++){

                        r=ch(r,j);

                }

                 s=dh(s,r);

        }

         cout<<s;

}

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值