高精度模板
好,这就是naive的高精度模板。目前只有加法&乘法。
http://www.mamicode.com/info-detail-454902.html 可以参考这个。
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 const int N = 10000; 6 string add(string a,string b) 7 { 8 string ans=""; 9 int aa[N],bb[N]; 10 fill(aa,aa+N,0); 11 fill(bb,bb+N,0); 12 int la=a.size(); 13 int lb=b.size(); 14 int len=max(la,lb); 15 for(int i=0;i<la;i++) aa[la-i-1]=a[i]-'0'; 16 for(int i=0;i<lb;i++) bb[lb-i-1]=b[i]-'0'; 17 for(int i=0;i<len;i++) 18 { 19 aa[i]+=bb[i]; 20 if(aa[i]>9) 21 { 22 aa[i+1]+=aa[i]/10; 23 aa[i]%=10; 24 if(i+1==len) len++; 25 } 26 } 27 for(int i=len-1;i>=0;i--) ans+=(aa[i]+'0'); 28 return ans; 29 } 30 31 string mul(string a,string b) 32 { 33 string ans=""; 34 int aa[N],bb[N],cc[N]; 35 int la=a.size(); 36 int lb=b.size(); 37 int len=la+lb-1; 38 fill(aa,aa+N,0); 39 fill(bb,bb+N,0); 40 fill(cc,cc+N,0); 41 for(int i=0;i<la;i++) aa[la-i-1]=a[i]-'0'; 42 for(int i=0;i<lb;i++) bb[lb-i-1]=b[i]-'0'; 43 for(int i=0;i<la;i++) 44 { 45 for(int j=0;j<lb;j++) 46 { 47 cc[i+j]+=aa[i]*bb[j]; 48 } 49 } 50 for(int i=0;i<len;i++) 51 { 52 if(cc[i]>9) 53 { 54 cc[i+1]+=cc[i]/10; 55 cc[i]%=10; 56 if(i+1==len) len++; 57 } 58 } 59 for(int i=len-1;i>=0;i--) ans+=(cc[i]+'0'); 60 return ans; 61 } 62 63 int main() 64 { 65 string a,b; 66 cin>>a>>b; 67 cout<<add(a,b)<<endl; 68 cout<<mul(a,b)<<endl; 69 return 0; 70 }