本文最后更新于653 天前,其中的信息可能已经过时,如有错误请发送邮件到525382782@qq.com
这道题用到了高精度算法,高精度算法,当出现很大的数,用unsigned long long都无法装下时,我们采用一种特殊的解决算法,用string或char来存储数字。高精度算法本质上是模拟数字的运算。
题目大概意思就是算出阶乘之和
#include<bits/stdc++.h>//万能头
using namespace std;
int a[120];//int类型数组
int b[120];
void add(int *a,int *b)
{
int jw=0;//jw数
for(int i=1;i<=120;i++)
{
b[i]=b[i]+a[i]+jw;
jw=b[i]/10;
b[i]=b[i]%10;
}
}
void cheng(int *a,int c)//模拟进位乘法
{
int jw=0;
for(int i=1;i<=120;i++)
{
a[i]=a[i]*c+jw;
jw = a[i]/10;
a[i] = a[i]%10;
}
}
int main()
{
int n;
cin>>n;
a[1]=1;
for(int i=1;i<=n;i++)
{
cheng(a,i);
add(a,b);
}
bool flag=0;
for(int i=120;i>=1;i--)//这里是从低位开始运算的,我们读从高位读输出
{
if(b[i]!=0)flag=1;
if(flag) cout<<b[i];
}
return 0;
}
b站上有个老师详细讲了这个题,可以去找找。这里用的是int数组,用char或string的数组同样也能做。
