#include#include #include using namespace std; string turn_str(int num) { string str = ""; int flag = bool(num < 0); if (flag)num = -num; while (num / 10) { str = char(num % 10 + 48) + str; num /= 10; } str = char(num + 48) + str; if (flag)str = "-" + str; return str; } int turn_int(string num) { int ret = 0; int flag = (num[0] == '-'); for (int i = flag; i < num.size(); i++)ret += int(num[i] - 48) * pow(10, num.size() - i - 1); if (flag)ret = -ret; return ret; } void add_z(string& lhs, string& rhs) { int num = (((lhs.size() >= rhs.size()) ? (lhs.size() - rhs.size()) : (rhs.size() - lhs.size())));//Landry's torment for (int i = 0; i < num; i++) { if (lhs.size() < rhs.size())lhs = '0' + lhs; else rhs = '0' + rhs; } } void minus_z(string& str) { int i = 0; if (str[0] != '0')return; while (str[i++] == '0'); str = str.substr(i - 1, str.size() - i + 1); } class Bignums { private: string m_data; int m_lenth; public: Bignums(); Bignums(int num); Bignums(string num); friend ostream& operator<<(ostream& om, Bignums bm); Bignums operator+(Bignums& ahs); Bignums operator-(Bignums& ahs); string& get_data() { return m_data; }; }; Bignums::Bignums() { m_data = "0"; m_lenth = 1; }; Bignums::Bignums(int num) { m_data = turn_str(num); m_lenth = m_data.size(); } Bignums::Bignums(string num) { m_data = num; m_lenth = m_data.size(); } ostream& operator<<(ostream& om, Bignums bm) { cout << bm.m_data; return om; } Bignums Bignums::operator+(Bignums& ahs) { int len = ((m_data.size() >= ahs.m_data.size()) ? (m_data.size()) : (ahs.m_data.size()));//Landry's torment int* count = new int[len + 2]; count[len+1] = 0; count[1] = 0; int tem; string str = ""; add_z((*this).get_data(), ahs.get_data()); for (int i = len-1; i >= 0; --i) { tem = ((*this).get_data()[i] - 48) + (ahs.get_data()[i] - 48) + (count[i+2]); count[i+1] = tem / 10; tem %= 10; str = char(tem + 48)+str; } if ((count[1]))str = char(count[1] + 48) + str; Bignums temp; temp.m_data = str; temp.m_lenth = str.size(); return temp; } int main() { string a = "111"; string b = "111111"; add_z(a, b); cout << a << endl << b; minus_z(a); cout << endl << a << endl; cout << "//" << endl; Bignums ba{ "35463546543635465436543635435466354" }; Bignums bb{ "5349058349083549054354654363546"}; cout << "ba = " << ba << " bb = " << bb << endl; cout << "ba+bb = " << ba + bb; return 0; }
无聊 不如去看《深入理解计算机系统》



