#pragma once #ifndef SJTU_BIGINTEGER #define SJTU_BIGINTEGER #include #include #include #include #include namespace sjtu { class int2048 { size_t buf_length = 0; const static int kMod = 100000000, kNum = 8, kDefaultLength = 10; const static int kMemAdditionScalar = 2, kMemDeleteScalar = 4; int *val = nullptr; signed char flag = +1; int num_length = 0; public: int2048(); int2048(long long); int2048(const std::string &); int2048(const int2048 &); void read(const std::string &); void print(); int2048 &add(const int2048 &); friend int2048 add(int2048, const int2048 &); int2048 &minus(const int2048 &); friend int2048 minus(int2048, const int2048 &); int2048 operator+() const; int2048 operator-() const; int2048 &operator=(const int2048 &); int2048 &operator+=(const int2048 &); friend int2048 operator+(int2048, const int2048 &); int2048 &operator-=(const int2048 &); friend int2048 operator-(int2048, const int2048 &); int2048 &operator*=(const int2048 &); friend int2048 operator*(int2048, const int2048 &); int2048 &operator/=(const int2048 &); friend int2048 operator/(int2048, const int2048 &); int2048 &operator%=(const int2048 &); friend int2048 operator%(int2048, const int2048 &); friend std::istream &operator>>(std::istream &, int2048 &); friend std::ostream &operator<<(std::ostream &, const int2048 &); friend bool operator==(const int2048 &, const int2048 &); friend bool operator!=(const int2048 &, const int2048 &); friend bool operator<(const int2048 &, const int2048 &); friend bool operator>(const int2048 &, const int2048 &); friend bool operator<=(const int2048 &, const int2048 &); friend bool operator>=(const int2048 &, const int2048 &); }; } // namespace sjtu #endif