在这里说一下,高精度的问题实质上是将一个非常大的数,按照个,十,百,千,万...,每一位上的数分别对应存到数组里从而将这个数通过for循环等输出出来。
以求阶乘之和为例
https://www.luogu.com.cn/problem/P1009
我的代码
#include<iostream>
using namespace std;
long long a[110],q,site,s[110];
void high_precision_multiplication(long long x)//高精度乘,
{
for(int i=100;i>=0;i--)
{
a[i]=a[i]*x+q;
q=a[i]/10;
a[i]=a[i]%10;
}
}
void high_precision_addtion()//高精度加,
{
int g=0;
for(int i=100;i>=0;i--)
{
s[i]=s[i]+a[i]+g;
g=s[i]/10;
s[i]=s[i]%10;
}
}
void find_location()//查找标记高精度位数,便于输出
{
for(int i=0;i<=100;i++)
{
if(a[i]!=0)
{
site=i;
break;
}
}
}
int main()
{
a[100]=1,s[100]=1;
long long n;
cin>>n;
for(int i=2;i<=n;i++)
{
high_precision_multiplication(i);
high_precision_addtion();
}
find_location();
for(int i=site;i<=100;i++)
{
cout<<s[i];
}
return 0;
}