包含以下內容:輸入,輸出,加法,減法,乘法,整除(除數為高精度),冪運算,模運算,運算帶等號,由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.第二行只有乙個字元,可以是 分別代...