#include <iostream> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <string> using std::string; using std::ostream; using std::cout; using std::cin; using std::endl; const int MAX = 220; //#define online class CHugeInt { private: bool positive; char s[MAX]; /** /* 计算大小关系,使得交换顺序来便于计算 ****/ int Compare(const CHugeInt & c) const// < -1, == 0, > 1 { int L1 = strlen(s); int L2 = strlen(c.s); if(L1 < L2) return -1; if(L1 > L2) return 1; // L1 == L2 for(int i = 0; i < L1; i++) { if(s[i] < c.s[i]) return -1; if(s[i] > c.s[i]) return 1; } return 0; } /*** /* 私有成员函数,专门计算 a + b,且满足a > b; ***/ CHugeInt Add(const CHugeInt &a, const CHugeInt & b) const { CHugeInt tp(a); tp.positive = true; int L1 = strlen(tp.s); int L2 = strlen(b.s); int Forward = 0; for(int i = L1-1, j = L2 - 1; i>=0; --i, --j) { int _n1 = tp.s[i] - '0'; int _n2 = 0; if(j >= 0) _n2 = b.s[j] - '0'; int n = _n1 + _n2 + Forward; Forward = 0; if(n>=10) { Forward = 1; n -= 10; } tp.s[i] = n + '0'; } if(Forward == 1) { for(int i = L1; i >=0 ; --i) tp.s[i+1] = tp.s[i]; tp.s[0] = '1'; } return tp; } /*** /*专门计算 a - b的私有成员函数,且满足a >= b; 计算结果符号始终为正 ****/ CHugeInt Sub(const CHugeInt & a, const CHugeInt & b) const { CHugeInt tp(a); int L1 = strlen(tp.s); int L2 = strlen(b.s); int Forward = 0; for(int i = L1 - 1, j = L2 - 1; i>=0; i--,j--) { int _n1 = tp.s[i] - '0'; int _n2 = 0; if(j >= 0) _n2 = b.s[j] - '0'; int n = _n1 - _n2 - Forward; Forward = 0; if(n < 0) { Forward = 1; n += 10; } tp.s[i] = n + '0'; } /** 去掉大整数前面的首0,通过搬运数字 **/ if(tp.s[0] != '0') return tp; int non_zero_index = -1;// ȫΪ0 for(int i = 0; i < L1; i++) { if(tp.s[i] != '0') { non_zero_index = i; break; } } if(non_zero_index == -1) { tp.s[1] = '