P1009 阶乘之和(高精度计算)

该博客介绍了如何使用高精度计算解决Luogu P1009题目的方法,即计算1!到n!的和。内容包括题目描述、输入输出格式、样例以及高精度计算的加法和乘法策略,提示读者需要掌握高精度运算技巧以应对更大的数据范围。
摘要由CSDN通过智能技术生成

题目链接

https://www.luogu.com.cn/problem/P1009
传送门

题目描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50)

其中“!”表示阶乘,例如:5!=5×4×3×2×1。

输入格式

一个正整数N。

输出格式

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

输入输出样例

输入 #1

3

输出 #1

9

说明

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有n≤20,使用书中的代码无法通过本题。

如果希望通过本题,请继续学习第八章高精度的知识。

提示

高精加法,将字符串中的单个数字单独存储于两个数组中,然后两个数组自尾相加,进位就和。

高精乘法,和高精加法差不多,只是最后再算进位

代码

#include<iostream>
#include<cmath>
#include<string>
#include<sstream>
using namespace std;
string mult(string str_a,string str_b);
string add(string str_a,string str_b);
int main(){
   
	int n;
	cin >> n;
	stringstream st;
	string str1 ="1",ans = "0";
	for(int i = 1;i <= n;i++){
   
		st << i;
		string tmp;
		st >> tmp;
		str1 = mult(tmp,str1);
		ans = add(ans,str1);
		st.clear();
	}
	cout << ans;
	return 0;
}
string mult(string str_a,string str_b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值