全整數域的高精度類

2021-06-13 22:22:26 字數 2058 閱讀 1240

包含以下內容:輸入,輸出,加法,減法,乘法,整除(除數為高精度),冪運算,模運算,運算帶等號,由int、string賦值,六種大小比較

時間複雜度:

加法——o(n)

減法——o(n)

乘法——o(n^2)

除法——o(n^3)

取模——o(n^3)

// bignum.h

#ifndef _bignum_h

#define _bignum_h

#include #include #include using namespace std;

class bignum

bignum(const string n)

bignum &operator=(const int &n);

bignum &operator=(const string &n);

bignum &operator=(const bignum &n);

};bignum &bignum::operator=(const int &n)

else

// 開始填入數值

while (temp >= 10)

num.push_back(temp);

// int沒有前置0,所以不用去除

return *this;

}bignum &bignum::operator=(const string &n)

// 去除前置0並確保至少留一位

for (vector ::size_type i(num.size() - 1); num[i] == 0 && i>0; i--)

num.pop_back();

return *this;

}bignum &bignum::operator=(const bignum &n)

istream &operator>>(istream &is, bignum &n)

bignum operator+(const bignum a, const bignum b)

} j++;

} bignum c(s); // 建構函式自動去除前置0

c.symbol = flag; // 歸還符號

return c;

}bignum operator/=(bignum &a, const bignum b)

bignum operator%(const bignum a, bignum b)

} }c.symbol = a.symbol;

return c;

}bignum operator%=(bignum &a, const bignum b)

bignum operator^(const bignum a, bignum b) // 快速冪運算

return c;

}bignum operator++(bignum a)

bignum operator++(bignum &a, int n)

bignum operator--(bignum a)

bignum operator--(bignum &a, int n)

bool operator<(const bignum a, const bignum b)

for (vector ::size_type i(lena - 1); i>0; i--) }

if (!a.symbol) return a.num[0] < b.num[0];

else return a.num[0] > b.num[0];

}bool operator>(const bignum a, const bignum b)

bool operator==(const bignum a, const bignum b)

bool operator<=(const bignum a, const bignum b)

bool operator>=(const bignum a, const bignum b)

bool operator!=(const bignum a, const bignum b)

#endif

高精度演算法之大整數類

由於程式語言提供的基本數值資料型別表示的數值範圍有限,不能滿足較大規模的高精度數值計算,因此需要利用其他方法實現高精度數值的計算,於是產生了大數運算。大數運算主要有加 減 乘三種方法。考慮用陣列儲存整數,並模擬手算的方法進行加減乘除四則運算。為了能像int一樣方便的使用大整數,可以定義結構體,大整數...

高精度整數的 , ,

高精度整數加法問題 求兩個整數,a和b的和,0 思路 這就需要回想起小學我們學的加減法了,借位 與進製 問題,分三個步驟來求解 1.處理輸入 用兩個字元陣列來儲存a和b,ans陣列表示最終答案 2.運算過程 遍歷兩個字元陣列,算出結果的每一位數,ans i a i b i 2 0 這裡要分開 如果不...

高精度整數運算

問題描述 編寫乙個程式,進行高精度整數的加 減 乘運算。輸入兩個十進位製大整數m和 n m n最長可達 50位 根據要求計算運算結果並輸出。輸入形式 標準輸入上依次分行輸入以下內容 1.第一行輸入第乙個大整數m。m可能帶有負號,後面是最長可達 50位的數字序列。2.第二行只有乙個字元,可以是 分別代...