Now is best !

HDOJ 1002

实现大整数运算,完成bigInteger类封装。

 
 1 #include  <iostream>
 2 #include <string>
 3 #include <cstdio>
 4 #include <iomanip>
 5 
 6 using namespace std;
 7 const int N = 1000;
 8 class bigInteger
 9 {
10     friend ostream& operator<<(ostream& out, const bigInteger &A);
11 public:
12     bigInteger()
13     {
14         for(int i=0; i<N; ++i)
15             digit[i] = 0;
16         size = 0;
17     }
18     void set(string s);
19     bigInteger operator+(const bigInteger &B);
20 
21 private:
22     int digit[N];
23     int size;
24 };
25 
26 ostream& operator<<(ostream& out,const bigInteger &A)
27 {
28     for(int i=A.size-1; i>=0; --i)
29         if (i!= A.size-1)
30             out << setfill('0') << setw(4) << A.digit[i];
31         else
32             out << A.digit[i];
33     return out;
34 }
35 
36 void bigInteger::set(string str)
37 {
38     int len = str.size();
39     
40     int j = 0, c = 1;
41     int t=0;
42     for(int i=len-1; i>=0; --i) {
43         t += (str[i]-'0')*c;
44         j++;
45         c *= 10;
46         if (j == 4 || i == 0) {
47             digit[size++] = t;
48             j = 0;
49             c = 1;
50             t = 0;
51         }
52     }
53 }
54 
55 bigInteger bigInteger::operator+(const bigInteger &B)
56 {
57     bigInteger ret;
58     int carry = 0;
59     for(int i=0; i<size || i<B.size; ++i) {
60         int temp = digit[i] + B.digit[i] + carry;
61         carry = temp / 10000;
62         temp %= 10000;
63         ret.digit[ret.size++] = temp;
64     }
65     if (carry != 0) {
66         ret.digit[ret.size++] = carry;
67     }
68     return ret;
69 }
70 int main()
71 {
72 #ifdef LOCAL
73     freopen("data.txt","r",stdin);
74     freopen("data.out","w",stdout);
75 #endif
76     int cases;
77     cin >> cases;
78     for(int i=0; i<cases; ++i) {
79         bigInteger a,b,c;
80         string s1,s2;
81         cin >> s1 >> s2;
82         a.set(s1);
83         b.set(s2);
84         c = a+b;
85         cout << "Case " << i+1 << ":" << endl;
86         cout << a << " + " << b << " = " << c << endl;
87         if (i < cases-1)
88             cout << endl;
89     }
90     return 0;
91 }

 

posted on 2013-10-18 12:47  fang0703  阅读(208)  评论(0)    收藏  举报

导航