upd: optimize return value and setup multiply

This commit is contained in:
2023-10-30 10:31:45 +08:00
parent 11a195fc61
commit d660095777
2 changed files with 33 additions and 12 deletions

View File

@ -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 &);

View File

@ -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 &) {