本蒟蒻的第一篇题解,还请各位大牛多指教。
题目要求输入n,求出1~n每个数的阶乘之和S。那我们就可以得出代码:
#include<bits/stdc++.h>//万能头文件
using namespace std;
long long n,ans,t=1;//t用于存储每个数的阶乘
int main(){
//输入
cin>>n;
//计算
for(int i=1;i<=n;i++){
t*=i;//计算当前数的阶乘
ans+=t;//求和
}
//输出
cout<<ans;
return 0;
}
然后我们就可以提交了,然后就完美的AC了WA了两个点。
观察本题的数据,我们可以发现本题的答案是超过long long 的数据范围的,所以我们可以选择高精。
首先是需要用高精度乘法计算每个数的阶乘,然后再用高精度加法求和。下面给出完整代码:
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> sum(1,1);//sum为最终答案
vector<int> t(1,1);//t为每个数的阶乘
void add(){
int len=max(sum.size(),t.size()),y=0;
while(sum.size()<len) sum.push_back(0);//补充0
while(t.size()<len) t.push_back(0);//同上
for(int i=0;i<len;i++){
sum[i]=sum[i]+t[i]+y;//计算每一位
y=sum[i]/10;//处理进位
sum[i]%=10;//