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 }
浙公网安备 33010602011771号