高精度运算模板(乘、阶乘)
1.高精度乘法
#include<bits/stdc++.h>//10^2000
using namespace std;
int a[2005],b[2005],c[4005],l1,l2;//cÒª¿ª´ó
string s1,s2,s;
string cheng(string s1,string s2)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
string ans;
for(int i=1;i<=l1;i++)a[i]=s1[l1-i]-'0';
for(int i=1;i<=l2;i++)b[i]=s2[l2-i]-'0';
int la=1,lc=0;
while(la<=l1)
{
int lb=1,k=la;
while(lb<=l2)c[k++]+=a[la]*b[lb++];
if(k>lc)lc=k;
la++;
}
int k=1;
while(k<=lc||c[k])
{
c[k+1]+=c[k]/10;
c[k++]%=10;
}
while(c[k]==0&&k>1)k--;
for(;k>=1;k--)ans+=c[k]+'0';
return ans;
}
void check()
{
if(l1<l2)
{
string ss=s1;s1=s2;s2=ss;
int l=l1;l1=l2;l2=l;
}
}
int main()
{
cin>>s1>>s2;
l1=s1.size();
l2=s2.size();
check();
s=cheng(s1,s2);
cout<<s<<endl;
return 0;
}
2.高精阶乘
#include<bits/stdc++.h>
using namespace std;
string s;
int n,l;
int a[9999999];
string jiecheng()
{
memset(a,0,sizeof(a));
string ans;
a[1]=1;
l=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=l;j++)a[j]*=i;
for(int j=1;j<=l;j++)
if(a[j]>10)a[j+1]+=a[j]/10,a[j]%=10;
while(a[l+1])
{
l++;
a[l+1]+=a[l]/10;
a[l]%=10;
}
}
for(;l>=1;l--)ans+=a[l]+'0';
return ans;
}
int main()
{
cin>>n;
s=jiecheng();
cout<<s<<endl;
return 0;
}