BigInteger

BigInteger

//============================================================================
// Name        : test2.cpp
// Author      : pprp
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <vector>
#include <cstring>


using namespace std;

struct BigInteger
{
	static const int BASE=10000000;
	static const int WIDTH=8;
	vector<int> s;

	BigInteger(long long num=0){*this = num;}
	BigInteger operator=(long long num)
	{
		s.clear();
		do
		{
			s.push_back(num % BASE);
			num /= BASE;
		}while(num > 0);
		return *this;
	}

	BigInteger operator=(const string & str){
		s.clear();
		int x, len= (str.length()-1)/WIDTH+1;
		for(int i = 0 ; i < len ; i++){
			int end = str.length() - i*WIDTH;
			int start = max(0,end-WIDTH);
			sscanf(str.substr(start,end-start).c_str(),"%d",&x);
			s.push_back(x);
		}
		return *this;
	}
	BigInteger operator+(const BigInteger& b)const {
		BigInteger c;
		c.s.clear();
		for(size_t i = 0, g = 0; ; i++){
			if(g ==0 && i >= s.size() && i >= b.s.size())break;
			int x = g;
			if(i < s.size()) x += s[i];
			if(i < b.s.size()) x += b.s[i];
			c.s.push_back(x % BASE);
			g = x/BASE;
		}
		return c;
	}
	BigInteger operator += (const BigInteger& b){
			*this = *this + b;
			return *this;
	 }

};

ostream& operator << (ostream& out,const BigInteger& x){
		out << x.s.back();
		for(int i = x.s.size()-2; i>= 0; i--){
			char buf[20];
			sprintf(buf,"%08d",x.s[i]);
			for(size_t j = 0 ; j < strlen(buf); j++)
				out << buf[j];
		}
		return out;
	}
istream& operator >> (istream& in,BigInteger& x){
		string s;
		if(!(in >> s))return in;
		x = s;
		return in;
	}
int main() {
	BigInteger a,b;
	cin >> a;
	cin >> b;
	a += b;
	cout << a << endl;

	return 0;
}
posted @ 2018-03-18 11:50  pprp  阅读(210)  评论(0编辑  收藏  举报