c++符号なしbigint高精度大整数

2943 ワード

c++符号なしbigint高精度大整数
このコードは減算と乗算のほか、劉汝佳の「アルゴリズムコンテスト入門経典第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ありがとうございます!