c++符号なしbigint高精度大整数
2943 ワード
c++符号なしbigint高精度大整数
このコードは減算と乗算のほか、劉汝佳の「アルゴリズムコンテスト入門経典第2版」を参考にしており、親測DevC++はコンパイルできる.コードはcodevs(codevs.cn)上で高精度のすべてのテーマを通過する.POWERED BY PHANTOM大神は喷かないで、みんなが支持することを望みます!
以上がすべてのコードで、bigintを1つの構造体にカプセル化しました.比較演算子、加減算演算、cin、coutストリーム入出力をサポートしますが、bigintと一般intを付与以外の演算はできません.完全なプログラムコードのダウンロード:http://download.csdn.net/detail/a1323933782/9802948ありがとうございます!
このコードは減算と乗算のほか、劉汝佳の「アルゴリズムコンテスト入門経典第2版」を参考にしており、親測DevC++はコンパイルできる.コードはcodevs(codevs.cn)上で高精度のすべてのテーマを通過する.POWERED BY PHANTOM大神は喷かないで、みんなが支持することを望みます!
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct bigint{ // only positive number;
static const int BASE=100000000;
static const int WIDTH=8;
vector s;
//value
bigint(long long num=0){ *this = num;}
bigint operator = (long long num){
s.clear();
do{
s.push_back(num%BASE);
num/=BASE;
}while(num>0);
return *this;
}
bigint operator = (const string& str){
s.clear() ;
int x,len = (str.length()-1)/WIDTH + 1;
for(int i=0;i=0;i--){
char buf[20];
sprintf(buf,"%08d",x.s[i]);
for(int j=0;j>(istream &in, bigint& x){
string s;
if(!(in>>s)) return in;
x=s;
return in;
}
//compare
bool operator < (const bigint& b) const {
if(s.size()!=b.s.size()) return s.size() < b.s.size();
for(int i=s.size()-1;i>=0;i--) if(s[i]!=b.s[i]) return s[i] < b.s[i];
return false;//equal
}
bool operator > (const bigint& b) const {return b < *this;}
bool operator <= (const bigint& b) const {return !(b < *this);}
bool operator >= (const bigint& b) const {return !(*this < b);}
bool operator != (const bigint& b) const {return b < *this || *this < b;}
bool operator == (const bigint& b) const {return !(b < *this) && !(*this < b);}
//calculate
bigint operator +(const bigint& b) const {
bigint c;
c.s.clear();
for(int i=0,g=0;;i++){
if(g==0 && i>=s.size() && i>=b.s.size()) break;
int x=g;
if(i=s.size() && i>=b.s.size()) break;
int x=g;
if(i=s.size()+b.s.size()-1) break;
bigint x;
x.s.clear() ;
for(int j=0;j1) for(int j=1;j
以上がすべてのコードで、bigintを1つの構造体にカプセル化しました.比較演算子、加減算演算、cin、coutストリーム入出力をサポートしますが、bigintと一般intを付与以外の演算はできません.完全なプログラムコードのダウンロード:http://download.csdn.net/detail/a1323933782/9802948ありがとうございます!