求出1!+2!+3!+4!+...+n!,请注意,n<=50

 

题目描述

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

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

输入

请输入一个整数n(n<=50)

#include <bits/stdc++.h>
using namespace std; 
string jiecheng(int n){
	char a[300];
	a[0]='1';
	int len=1;
	for(int i=2;i<=n;i++){
		int jin=0;
		for(int j=0;j<len;j++){
			int t= i*(a[j]-'0')+jin;
			jin=t/10;
			a[j]=t%10+'0';
		}
		while(jin>0){
			a[len]=jin%10+'0';
			len++;
			jin=jin/10;
		}
	}
	string s="";
	for(int i=len-1;i>=0;i--){
		//cout<<a[i];
		s=s+a[i];
	}
	return s;
}
string jia(string s1,string s2){
	char s3[300];
	if(s1.length()<s2.length()){
		swap(s1,s2);
	}

	int len1=s1.length();
	int len2=s2.length();
	for(int i=0;i<len1-len2;i++ ){
		s2="0"+s2;
	}
	int jin=0;
	for(int i=len1-1;i>=0;i--){
		int t=s1[i]-'0'+s2[i]-'0'+jin;
		jin=t/10;
		s3[i]=t%10+'0';
	}
	string ss="";
	if(jin>0){
		ss=ss+"1";
	}
	for(int i=0;i<len1;i++){
		ss=ss+s3[i];
	}
	return ss;
}
int main(int argc, char** argv) {
	//freopen("abc.txt","r",stdin);
	string s1="0",s2;
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		s2=jiecheng(i);
		s1=jia(s1,s2);
	}
	cout<<s1;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值