1998 阶乘之和
这道题明显是一个高精,而且非常恶心
题目我们就不分析了,比较简单
这道题有很多的步骤
首先我们得先循环枚举每一个1~n的数e,用来算阶乘的和,也就是加数
接下来就是我们把这个数e进行循环将e的因子进行高精诸位相乘,这里需要开一个阶乘数组,数组的第一位要设置成1,因为乘嘛,不能为0.
然后我们再用一个循环进行进位处理
然后再来一个循环用总和数组sum诸位相加
然后还是一个循环进行进位处理
最后我们得把乘积数组a除了第一位全部清零
最后输出
#include<bits/stdc++.h>
using namespace std;
const int maxn=10000;
int n,k,i,j,t;
int a[maxn]={},sum[maxn]={};
int main()
{
cin>>n;
sum[0]=0;
k=1,t=1;//k记录阶乘的长度,t记录阶乘之和的长度
for(int e=1;e<=n;e++)
{//记录1~n的阶乘
a[0]=1;//记录阶乘初始为1
for(i=1;i<=e;i++)
{//阶乘的因子
for(j=0;j<k;j++)
{
a[j]=a[j]*i; //乘起来
//高精相乘
}
for(j=0;j<k;j++)//进位处理
{
if(a[j]>=10)
{
a[j+1]+=a[j]/10;
a[j]=a[j]%10;
if(j==k-1) k++;//进位
}
}
}
for(int p=0;p<k;p++)
{
sum[p]=sum[p]+a[p];//阶乘之和
}
for(int p=0;p<t;p++){//进位处理
if(sum[p+1]>=10){
t++;
}
if(sum[p]>=10){
sum[p+1]+=sum[p]/10;
sum[p]=sum[p]%10;
}
}
for(int q=1;q<k;q++){
a[q]=0;//清零
}
}
for(i=k-1;i>=0;i--){
cout<<sum[i]<<"";
}
cout<<endl;
}
这篇博客介绍了如何使用C++实现计算1998阶乘之和的高精度算法。通过循环枚举、阶乘计算、高精度乘法和进位处理等步骤,详细阐述了整个过程。代码中展示了如何处理阶乘数组和进位,最终得到阶乘之和并输出结果。
876

被折叠的 条评论
为什么被折叠?



