upd: optimize return value and setup multiply
This commit is contained in:
@ -27,7 +27,7 @@ class int2048 {
|
|||||||
int2048(long long);
|
int2048(long long);
|
||||||
int2048(const std::string &);
|
int2048(const std::string &);
|
||||||
int2048(const int2048 &);
|
int2048(const int2048 &);
|
||||||
int2048 (int2048 &&) noexcept;
|
int2048(int2048 &&) noexcept;
|
||||||
~int2048();
|
~int2048();
|
||||||
|
|
||||||
void read(const std::string &);
|
void read(const std::string &);
|
||||||
@ -35,9 +35,9 @@ class int2048 {
|
|||||||
|
|
||||||
void ClaimMem(size_t);
|
void ClaimMem(size_t);
|
||||||
|
|
||||||
inline friend int UnsignedCmp(const int2048 &A,const int2048 &B);
|
inline friend int UnsignedCmp(const int2048 &, const int2048 &);
|
||||||
inline friend void UnsignedAdd(int2048 &,const int2048 *pB);
|
inline friend void UnsignedAdd(int2048 &, const int2048 *);
|
||||||
inline friend void UnsignedMinus(int2048 &,const int2048 *pB);
|
inline friend void UnsignedMinus(int2048 &, const int2048 *);
|
||||||
int2048 &add(const int2048 &);
|
int2048 &add(const int2048 &);
|
||||||
friend int2048 add(int2048, const int2048 &);
|
friend int2048 add(int2048, const int2048 &);
|
||||||
|
|
||||||
@ -56,6 +56,10 @@ class int2048 {
|
|||||||
int2048 &operator-=(const int2048 &);
|
int2048 &operator-=(const int2048 &);
|
||||||
friend int2048 operator-(int2048, const int2048 &);
|
friend int2048 operator-(int2048, const int2048 &);
|
||||||
|
|
||||||
|
inline friend void UnsignedMultiply(int2048 &, const int2048 *);
|
||||||
|
int2048 &Multiply(const int2048 &);
|
||||||
|
friend int2048 Multiply(int2048, const int2048 &);
|
||||||
|
|
||||||
int2048 &operator*=(const int2048 &);
|
int2048 &operator*=(const int2048 &);
|
||||||
friend int2048 operator*(int2048, const int2048 &);
|
friend int2048 operator*(int2048, const int2048 &);
|
||||||
|
|
||||||
|
@ -217,7 +217,7 @@ int2048 &int2048::add(const int2048 &B) {
|
|||||||
// 返回两个大整数之和
|
// 返回两个大整数之和
|
||||||
int2048 add(int2048 A, const int2048 &B) {
|
int2048 add(int2048 A, const int2048 &B) {
|
||||||
// 实现加法逻辑
|
// 实现加法逻辑
|
||||||
return A.add(B);
|
return std::move(A.add(B));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void UnsignedMinus(int2048 &A, const int2048 *const pB) {
|
inline void UnsignedMinus(int2048 &A, const int2048 *const pB) {
|
||||||
@ -266,21 +266,21 @@ int2048 &int2048::minus(const int2048 &B) {
|
|||||||
// 返回两个大整数之差
|
// 返回两个大整数之差
|
||||||
int2048 minus(int2048 A, const int2048 &B) {
|
int2048 minus(int2048 A, const int2048 &B) {
|
||||||
// 实现减法逻辑
|
// 实现减法逻辑
|
||||||
return A.minus(B);
|
return std::move(A.minus(B));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 运算符重载
|
// 运算符重载
|
||||||
|
|
||||||
int2048 int2048::operator+() const {
|
int2048 int2048::operator+() const {
|
||||||
// 实现一元加法逻辑
|
// 实现一元加法逻辑
|
||||||
return int2048(*this);
|
return std::move(int2048(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
int2048 int2048::operator-() const {
|
int2048 int2048::operator-() const {
|
||||||
// 实现一元减法逻辑
|
// 实现一元减法逻辑
|
||||||
int2048 ret(*this);
|
int2048 ret(*this);
|
||||||
if (!(ret.num_length == 1 && ret.val[0] == 0)) ret.flag = -ret.flag;
|
if (!(ret.num_length == 1 && ret.val[0] == 0)) ret.flag = -ret.flag;
|
||||||
return ret;
|
return std::move(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
int2048 &int2048::operator=(const int2048 &B) {
|
int2048 &int2048::operator=(const int2048 &B) {
|
||||||
@ -316,7 +316,7 @@ int2048 &int2048::operator+=(const int2048 &B) {
|
|||||||
int2048 operator+(int2048 A, const int2048 &B) {
|
int2048 operator+(int2048 A, const int2048 &B) {
|
||||||
// 实现加法逻辑
|
// 实现加法逻辑
|
||||||
A.add(B);
|
A.add(B);
|
||||||
return A;
|
return std::move(A);
|
||||||
}
|
}
|
||||||
|
|
||||||
int2048 &int2048::operator-=(const int2048 &B) {
|
int2048 &int2048::operator-=(const int2048 &B) {
|
||||||
@ -327,15 +327,32 @@ int2048 &int2048::operator-=(const int2048 &B) {
|
|||||||
int2048 operator-(int2048 A, const int2048 &B) {
|
int2048 operator-(int2048 A, const int2048 &B) {
|
||||||
// 实现减法逻辑
|
// 实现减法逻辑
|
||||||
A.minus(B);
|
A.minus(B);
|
||||||
return A;
|
return std::move(A);
|
||||||
}
|
}
|
||||||
|
|
||||||
int2048 &int2048::operator*=(const int2048 &) {
|
inline void UnsignedMultiply(int2048 &A, const int2048 *pB) { ; }
|
||||||
|
|
||||||
|
int2048 &int2048::Multiply(const int2048 &B) {
|
||||||
// 实现复合乘法逻辑
|
// 实现复合乘法逻辑
|
||||||
|
const int2048 *pB = &B;
|
||||||
|
if (this == &B) pB = new int2048(B);
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
int2048 operator*(int2048, const int2048 &) {
|
int2048 Multiply(int2048 A, const int2048 &B) {
|
||||||
// 实现乘法逻辑
|
// 实现乘法逻辑
|
||||||
|
return std::move(A.Multiply(B));
|
||||||
|
}
|
||||||
|
|
||||||
|
int2048 &int2048::operator*=(const int2048 &B) {
|
||||||
|
// 实现复合乘法逻辑
|
||||||
|
return this->Multiply(B);
|
||||||
|
}
|
||||||
|
|
||||||
|
int2048 operator*(int2048 A, const int2048 &B) {
|
||||||
|
// 实现乘法逻辑
|
||||||
|
A.Multiply(B);
|
||||||
|
return std::move(A);
|
||||||
}
|
}
|
||||||
|
|
||||||
int2048 &int2048::operator/=(const int2048 &) {
|
int2048 &int2048::operator/=(const int2048 &) {
|
||||||
|
Reference in New Issue
Block a user