题目链接
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