Bign
1 #include<iostream>
2 #include<string>
3 #include<cstring>
4 #include<cstdio>
5 using namespace std;
6 const int maxn = 1000 + 5;
7
8 class bign
9 {
10 public:
11 int len, s[maxn];
12 bign()
13 {
14 len = 0;
15 memset(s, 0, sizeof(s));
16 }
17 bign operator = (const char *num)
18 {
19 //支持对字符数组的赋值
20 len = strlen(num);
21 for(int i = 0; i < len; ++i)
22 s[i] = num[len-i-1] - '0';
23 return *this;
24 }
25 bign(const char *num)
26 {
27 //初始化
28 *this = num;
29 }
30 bign operator = (int num)
31 {
32 //支持对整型数的赋值
33 char s[maxn];
34 sprintf(s, "%d", num);
35 *this = s;
36 return *this;
37 }
38 bign(int num)
39 {
40 //初始化
41 *this = num;
42 }
43 string str() const
44 {
45 //x.str()不会改变x
46 string str = "";
47 for(int i = 0; i < len; ++i)
48 str += (char)(s[i] + '0');//str = str + s[i] +'0'也可以
49 if(str == "")
50 str = "0";
51 return str;
52 }
53 friend istream& operator>>(istream &in, bign& b);/*
54 {
55 string str;
56 in >> str;
57 b = str.c_str();
58 return in;
59 }*/
60 friend ostream& operator<<(ostream &out, bign& b);/*
61 {
62 out << b.str();
63 return out;
64 }*/
65 bign operator +(const bign& b) const
66 {
67 bign c;
68 c.len = 0;
69 /*
70 int d = 0, i = 0;
71 for(; d || i < max(len, b.len); ++i)
72 {
73 int x = d;
74 if(i < len)
75 x += s[i];
76 if(i < b.len)
77 x += b.s[i];
78 c.s[c.len++] = x % 10;
79 g = x % 10;
80 }
81 */
82 // memset(c, 0, sizeof(c));
83 int i = 0, d = 0;
84 for(; i < max(len, b.len)+1; ++i)
85 {
86 int x = s[i] + b.s[i] + d;
87 d = c.s[i] / 10;
88 x %= 10;
89 c.s[c.len++] = x;
90 }
91 if(d == 0)
92 --c.len;
93 return c;
94 }
95 bign operator +=(const bign& b)
96 {
97 *this = *this + b;
98 return *this;
99 }
100 bool operator <(const bign& b) const
101 {
102 if(len != b.len)
103 return len < b.len;
104 for(int i = len-1; i >= 0; --i)
105 if(s[i] != b.s[i])
106 return s[i] < b.s[i];
107 return false;
108 }
109 bool operator >(const bign& b) const
110 {
111 return b < *this;
112 }
113 bool operator <= (const bign& b) const
114 {
115 return !(*this > b);
116 }
117 bool operator >=(const bign& b) const
118 {
119 return !(*this < b);
120 }
121 bool operator ==(const bign& b) const
122 {
123 return !(*this < b) && (*this > b);
124 }
125 };
126
127 inline istream& operator>>(istream &in, bign& b)
128 {
129 string str;
130 in >> str;
131 b = str.c_str();
132 return in;
133 }
134 inline ostream& operator<<(ostream &out, bign& b)
135 {
136 out << b.str();
137 return out;
138 }
139 int main()
140 {
141 return 0;
142 }
下面是一些实验:
Test
1 #include<iostream>
2 #include<sstream>
3 #include<cstring>
4 #include<cstdio>
5 using namespace std;
6
7 int main()
8 {
9 __int64 n;
10 char a[1000];
11 while(cin >> n)
12 {
13 //注意整数不能溢出,cin返回错误直接退出
14 stringstream ss;
15 ss << n;
16 string str;
17 ss >> str;
18 cout << str;
19 cout << endl;
20 /*
21 //还是用C++的stringstream好,C的__int64依然是当做普通int操作的,容易出错
22 sprintf(a, "%d", n);
23 for(int i = 0; i < strlen(a); ++i)
24 cout << a[i];
25 */
26 cout << endl << "**********************String****************************" << endl;
27 string str = "";
28 //对string串字符方式的赋值
29 for(int i = 0; i < strlen(a); ++i)
30 str += (char)(a[i]);
31 if(str == "")
32 str = "0";
33 cout << str;
34 cout << endl << "**********************Input****************************" << endl;
35 }
36 return 0;
37 }
原文链接: https://www.cnblogs.com/sanghai/archive/2013/04/04/2999555.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/83300
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!