未完待续的C++大数类BigInteger

看着JAVA诱人的大数类在ACM中很好用,可是我不会JAVA,感觉为了大数类去学习JAVA太麻烦了,不如写个C++的大数类,目前还未完善,只有部分功能的雏形,因为现在知识有限,即使拿着C++ Primer Plus和刘汝佳的白书各种翻,也才写了这一点,不过目测除了前导零没有什么bug了,刚才拿这个代码A了个题。。然后我打算慢慢完善它。。。

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 const int MAXLENTH = 10000;
 5 class BigInteger
 6 {
 7     private:
 8     char s[MAXLENTH+10];
 9     int len;
10     public:
11     void init(){memset(s, 0, sizeof(s)); len = 1;}
12     BigInteger(){init();}
13     friend istream& operator>> (istream &in, BigInteger &x);
14     friend ostream& operator<< (ostream &out, BigInteger &x);
15     BigInteger operator= (char *num);
16     BigInteger operator+ (BigInteger &y);
17     BigInteger operator+= (BigInteger &y);
18 };
19 
20 istream& operator>> (istream &in, BigInteger &x)
21 {
22     x.init();
23     char str[MAXLENTH];
24     in >> str;
25     x = str;
26     return in;
27 }
28 
29 ostream& operator<< (ostream &out, BigInteger &x)
30 {
31     char ans[MAXLENTH];
32     for(int i = 0; i < x.len; i++)
33         ans[i] = x.s[x.len-i-1] + '0';
34     ans[x.len] = '\0';
35     out << ans;
36     return out;
37 }
38 
39 BigInteger BigInteger::operator= (char *num)
40 {
41     len = strlen(num);
42     for(int i = 0; i < len; i++)
43         s[i] = num[len-i-1] - '0';
44     return *this;
45 }
46 
47 BigInteger BigInteger::operator+ (BigInteger &y)
48 {
49     BigInteger z;
50     for(int i = 0, c = 0; i <= MAXLENTH; i++)
51     {
52         int sum = s[i] + y.s[i] + c;
53         z.s[i] = sum % 10;
54         c = sum / 10;
55     }
56     int j = MAXLENTH;
57     for( ; j > 0; j--)
58         if(z.s[j])break;
59     z.len = j+1;
60     return z;
61 }
62 
63 BigInteger BigInteger::operator+= (BigInteger &y)
64 {
65     *this = *this + y;
66     return *this;
67 }
68 
69 int main()
70 {
71     BigInteger a, b, c;
72     while(cin >> a >> b)
73     {
74         c = a + b;
75         cout << c << endl;
76     }
77     return 0;
78 }

 

posted @ 2013-04-24 22:51  Anti-Magic  阅读(552)  评论(0编辑  收藏  举报