高精度模板

好,这就是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 }
高精度模板
原文地址:https://www.cnblogs.com/huyufeifei/p/8521797.html