From d6600957773240c42b97cdccb35c2a146af4f757 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Mon, 30 Oct 2023 10:31:45 +0800 Subject: [PATCH] upd: optimize return value and setup multiply --- include/int2048.h | 12 ++++++++---- src/int2048.cpp | 33 +++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/include/int2048.h b/include/int2048.h index a92fef0..c7b2989 100644 --- a/include/int2048.h +++ b/include/int2048.h @@ -27,7 +27,7 @@ class int2048 { int2048(long long); int2048(const std::string &); int2048(const int2048 &); - int2048 (int2048 &&) noexcept; + int2048(int2048 &&) noexcept; ~int2048(); void read(const std::string &); @@ -35,9 +35,9 @@ class int2048 { void ClaimMem(size_t); - inline friend int UnsignedCmp(const int2048 &A,const int2048 &B); - inline friend void UnsignedAdd(int2048 &,const int2048 *pB); - inline friend void UnsignedMinus(int2048 &,const int2048 *pB); + inline friend int UnsignedCmp(const int2048 &, const int2048 &); + inline friend void UnsignedAdd(int2048 &, const int2048 *); + inline friend void UnsignedMinus(int2048 &, const int2048 *); int2048 &add(const int2048 &); friend int2048 add(int2048, const int2048 &); @@ -56,6 +56,10 @@ class int2048 { int2048 &operator-=(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 &); friend int2048 operator*(int2048, const int2048 &); diff --git a/src/int2048.cpp b/src/int2048.cpp index 759fb5c..5cde16b 100644 --- a/src/int2048.cpp +++ b/src/int2048.cpp @@ -217,7 +217,7 @@ int2048 &int2048::add(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) { @@ -266,21 +266,21 @@ int2048 &int2048::minus(const int2048 &B) { // 返回两个大整数之差 int2048 minus(int2048 A, const int2048 &B) { // 实现减法逻辑 - return A.minus(B); + return std::move(A.minus(B)); } // 运算符重载 int2048 int2048::operator+() const { // 实现一元加法逻辑 - return int2048(*this); + return std::move(int2048(*this)); } int2048 int2048::operator-() const { // 实现一元减法逻辑 int2048 ret(*this); 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) { @@ -316,7 +316,7 @@ int2048 &int2048::operator+=(const int2048 &B) { int2048 operator+(int2048 A, const int2048 &B) { // 实现加法逻辑 A.add(B); - return A; + return std::move(A); } int2048 &int2048::operator-=(const int2048 &B) { @@ -327,15 +327,32 @@ int2048 &int2048::operator-=(const int2048 &B) { int2048 operator-(int2048 A, const int2048 &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 &) {