来自刘汝佳的书
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 5 const int maxn = 200; 6 struct bign{ 7 int len, s[maxn]; 8 9 bign() { 10 memset(s, 0, sizeof(s)); 11 len = 1; 12 } 13 14 bign(int num) { 15 *this = num; 16 } 17 18 bign(const char* num) { 19 *this = num; 20 } 21 22 bign operator = (int num) { 23 char s[maxn]; 24 sprintf(s, "%d", num); 25 *this = s; 26 return *this; 27 } 28 29 bign operator = (const char* num) { 30 len = strlen(num); 31 for(int i = 0; i < len; i++) s[i] = num[len-i-1] - '0'; 32 return *this; 33 } 34 35 string str() const { 36 string res = ""; 37 for(int i = 0; i < len; i++) res = (char)(s[i] + '0') + res; 38 if(res == "") res = "0"; 39 return res; 40 } 41 42 bign operator + (const bign& b) const{ 43 bign c; 44 c.len = 0; 45 for(int i = 0, g = 0; g || i < max(len, b.len); i++) { 46 int x = g; 47 if(i < len) x += s[i]; 48 if(i < b.len) x += b.s[i]; 49 c.s[c.len++] = x % 10; 50 g = x / 10; 51 } 52 return c; 53 } 54 55 void clean() { 56 while(len > 1 && !s[len-1]) len--; 57 } 58 59 bign operator * (const bign& b) { 60 bign c; c.len = len + b.len; 61 for(int i = 0; i < len; i++) 62 for(int j = 0; j < b.len; j++) 63 c.s[i+j] += s[i] * b.s[j]; 64 for(int i = 0; i < c.len-1; i++){ 65 c.s[i+1] += c.s[i] / 10; 66 c.s[i] %= 10; 67 } 68 c.clean(); 69 return c; 70 } 71 72 bign operator - (const bign& b) { 73 bign c; c.len = 0; 74 for(int i = 0, g = 0; i < len; i++) { 75 int x = s[i] - g; 76 if(i < b.len) x -= b.s[i]; 77 if(x >= 0) g = 0; 78 else { 79 g = 1; 80 x += 10; 81 } 82 c.s[c.len++] = x; 83 } 84 c.clean(); 85 return c; 86 } 87 88 bool operator < (const bign& b) const{ 89 if(len != b.len) return len < b.len; 90 for(int i = len-1; i >= 0; i--) 91 if(s[i] != b.s[i]) return s[i] < b.s[i]; 92 return false; 93 } 94 95 bool operator > (const bign& b) const{ 96 return b < *this; 97 } 98 99 bool operator <= (const bign& b) { 100 return !(b > *this); 101 } 102 103 bool operator == (const bign& b) { 104 return !(b < *this) && !(*this < b); 105 } 106 107 bign operator += (const bign& b) { 108 *this = *this + b; 109 return *this; 110 } 111 }; 112 113 istream& operator >> (istream &in, bign& x) { 114 string s; 115 in >> s; 116 x = s.c_str(); 117 return in; 118 } 119 120 ostream& operator << (ostream &out, const bign& x) { 121 out << x.str(); 122 return out; 123 } 124 125 int main() { 126 bign a; 127 cin >> a; 128 a += "123456789123456789000000000"; 129 cout << a*2 << endl; 130 return 0; 131 }