大数问题-阶乘和

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。
大数问题-阶乘和_第1张图片

题目描述-原题传送门

用高精度计算出 S = 1 ! + 2 ! + 3 ! + … + n ! ( n ≤ 50 ) S=1!+2!+3!+…+n! (n≤50) S=1!+2!+3!++n!(n50)
其中“!”表示阶乘,例如: 5 ! = 5 × 4 × 3 × 2 × 1 5!=5×4×3×2×1 5!=5×4×3×2×1

输入格式

一个正整数 N N N

输出格式

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

输入输出样例
输入

3

输出

9

题解

#include 

using namespace std;

int f[2020]={1},s[2020];

void mymultiply(int f[],int k){
	int i;
	for(i=0;i<1000;i++){
		f[i]*=k;
	}
	for(i=0;i<1000;i++){
		if(f[i]>=10){//处理进位 
			f[i+1]+=f[i]/10;
			f[i]%=10;
		} 
	}
}

void myplus(int f[],int s[]){
	for(int i=0;i<1000;i++){
		s[i]+=f[i];
		if(s[i]>=10){
			s[i+1]++;
			s[i]%=10;
		}
	}
}

int main(){
	int n,i;
	cin>>n;
	for( i=1;i<=n;i++){
		mymultiply(f,i);
		myplus(f,s);
	}
	i=1000;
	while(s[i]==0)
		i--;
	for(;i>=0;i--)
		cout<<s[i];
}

都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C/C++专栏


如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。

你可能感兴趣的:(#,蓝桥,OJ)