在这里,我们约定,能用int表示的数据视为单精度,否则为高精度。所有函数的设计均采用带返回值的形式。
本文包含
1.高精度加法
2.高精度减法
3.高精度乘法
1)高精度乘高精度的朴素算法
2)高精度乘高精度FFT优化算法
3)高精度乘单精度
4.高精度除法
1)高精度除高精度
2)高精度除单精度
5.高精度取模
1)高精度对高精度取模
2)高精度对单精度取模
6.高精度阶乘
7.高精度幂
8.高精度GCD
9.高精度进制转换
10.高精度求平方根
下面切入正题
1.高精度加法
传入参数约定:传入参数均为string类型,返回值为string类型
算法思想:倒置相加再还原。
算法复杂度:o(n)
1 string add(string a,string b)//只限两个非负整数相加 2 { 3 const int L=1e5; 4 string ans; 5 int na[L]={0},nb[L]={0}; 6 int la=a.size(),lb=b.size(); 7 for(int i=0;i<la;i++) na[la-1-i]=a[i]-'0'; 8 for(int i=0;i<lb;i++) nb[lb-1-i]=b[i]-'0'; 9 int lmax=la>lb?la:lb; 10 for(int i=0;i<lmax;i++) na[i]+=nb[i],na[i+1]+=na[i]/10,na[i]%=10; 11 if(na[lmax]) lmax++; 12 for(int i=lmax-1;i>=0;i--) ans+=na[i]+'0'; 13 return ans; 14 }