c++ 无符号bigint高精度大整数

c++ 无符号bigint高精度大整数

此代码除了减法和乘法以外均参考了刘汝佳的《算法竞赛入门经典第二版》,亲测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封装在一个结构体里面了。支持比较运算符,加减乘运算,支持cin、cout流式输入输出,但是不能把bigint和一般int进行除了赋值以外的运算。
完整的程序代码下载:http://download.csdn.net/detail/a1323933782/9802948
谢谢支持!

你可能感兴趣的:(算法)