码迷,mamicode.com
首页 > 其他好文 > 详细

高精度模板

时间:2017-08-23 00:46:23      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:ios   this   for   memcpy   als   bsp   set   int   --   

 1 const int MAXN = 35;
 2 const int M = 1e9;//1e9为1节
 3 struct highNum{
 4     ll num[MAXN];
 5     highNum(int length = 1){
 6         memset(num, 0, sizeof(num));
 7         num[0] = length;
 8     }
 9     highNum operator = (highNum b){
10         memcpy(num, b.num, sizeof(b.num));
11         return *this;
12     }
13     highNum operator = (int b){
14         *this = highNum();
15         num[num[0]] = b;
16         return *this;
17     }
18     bool operator < (const highNum& b) const{
19         if(num[0] < b.num[0]) return true;
20         if(num[0] == b.num[0]){
21             for(int i = num[0]; i >= 1; i--){
22                 if(num[i] > b.num[i]) return false;
23                 if(num[i] < b.num[i]) return true;
24             }
25         }
26         return false;
27     }
28     highNum operator + (const highNum& b) const{
29         highNum c = highNum(max(num[0], b.num[0]));
30         for(int i = 1; i <= c.num[0]; i++){
31             c.num[i] += num[i] + b.num[i];
32             c.num[i + 1] += c.num[i] / M;
33             c.num[i] %= M;
34         }
35         while(c.num[c.num[0] + 1] > 0){
36             c.num[0]++;
37             c.num[c.num[0] + 1] += c.num[c.num[0]] / M;
38             c.num[c.num[0]] %= M;
39         }
40         return c;
41     }
42     highNum operator * (const int b) const{
43         highNum c = highNum(num[0]);
44         for(int i = 1; i <= c.num[0]; i++){
45             c.num[i] += num[i] * b;
46             c.num[i + 1] += c.num[i] / M;
47             c.num[i] %= M;
48         }
49         while(c.num[c.num[0] + 1] > 0){
50             c.num[0]++;
51             c.num[c.num[0] + 1] += c.num[c.num[0]] / M;
52             c.num[c.num[0]] %= M;
53         }
54         while(c.num[c.num[0]] == 0 && c.num[0] > 1) c.num[0]--;
55         return c;
56     }
57     highNum operator * (const highNum& b) const{
58         highNum c = highNum(num[0] + b.num[0]);
59         for(int i = 1; i <= num[0]; i++){
60             for(int j = 1; j <= b.num[0]; j++){
61                 c.num[i + j - 1] += num[i] * b.num[j];
62                 c.num[i + j] = c.num[i + j - 1] / M;
63                 c.num[i + j - 1] %= M;
64             }
65         }
66         while(c.num[c.num[0] + 1] > 0){
67             c.num[0]++;
68             c.num[c.num[0] + 1] += c.num[c.num[0]] / M;
69             c.num[c.num[0]] %= M;
70         }
71         while(c.num[c.num[0]] == 0 && c.num[0] > 1) c.num[0]--;
72         return c;
73     }
74 };
75 
76 ostream& operator << (ostream& o, highNum& b){
77     o << b.num[b.num[0]];
78     o.setf(ios::fixed);
79     o.width(8);
80     o.fill(0);
81     for(int i = b.num[0] - 1; i >= 1; i--){
82         o << b.num[i];
83     }
84     return o;
85 }

 

高精度模板

标签:ios   this   for   memcpy   als   bsp   set   int   --   

原文地址:http://www.cnblogs.com/geloutingyu/p/7414080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!