uva424--BigNumber

参照《算法竞赛入门经典》写的大数类,瞬过~

等有时间了还可以将这个大数类补充完整。

//#define LOCAL
#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;

#define MAXN 80 + 10
#define MAX 255 + 10

const int maxn = 1000;

// 大数类的定义 
struct bign
{
	int len, s[maxn];
	bign()
	{
		memset(s, 0, sizeof(s));
		len = 1;
	}
	
	// 重载操作符‘=’用于赋值字符数组
	bign operator = (const char* num)
	{
		len = strlen(num);
		for(int i = 0; i < len; i++)
		{
			s[i] = num[len - i - 1] - '0';
		}
		return *this;
	}
		
	// 重载操作符‘=’用于赋值数字 
	bign operator = (int num)
	{
		char s[maxn];
		sprintf(s, "%d", num);
		*this = s;
		return *this;
	}
	
	// 参数为数字类型的构造函数
	bign(int num)
	{
		*this = num;
	} 
	
	// 参数为字符数组类型的构造函数
	bign(const char* num)
	{
		*this = num;
	} 
	
	// 将字符数组转化成字符串
	string str() const
	{
		string res = "";
		for(int i = 0; i < len; i++)
		{
			res = (char)(s[i] + '0') + res;

		}
		if(res == "") res = "0";
			return res;
	} 
	
	// 重载操作符 +
	bign operator + (const bign& b) const
	{
		bign c;
		c.len = 0;
		for(int i = 0, g = 0; g || i < max(len, b.len); i++)
		{
			int x = g;
			if(i < len)
				x += s[i];
			if(i < b.len)
				x += b.s[i];
			c.s[c.len++] = x % 10;
			g = x / 10;
		}
		return c;
	}
	
	// 重载操作符 += 
	bign operator += (const bign& b)
	{
		*this = *this + b;
		return *this;
	} 
	
	// 重载比较操作符 <
	bool operator < (const bign& b) const
	{
		if(len != b.len) return len < b.len;
		for(int i = len - 1; i >= 0; i++)
			if(s[i] != b.s[i])
				return s[i] < b.s[i];
		return false;
	} 
	
	// 重载比较操作符 >
	bool operator > (const bign& b) const
	{
		return b < *this;
	}
	
	// 重载比较操作符 <=
	bool operator <= (const bign& b) const
	{
		return !(b < *this);
	}
	
	// 重载比较操作符 >=
	bool operator >= (const bign& b) const
	{
		return !(*this < b);
	}
	
	// 重载比较操作符 !=
	bool operator != (const bign& b) const
	{
		return b < *this || *this < b;
	}
	
	// 重载比较操作符 ==
	bool operator == (const bign& b) const
	{
		return !(b < *this) && !(*this < b);
	}
};

	// 重载操作符 >>
istream& operator >> (istream &in, bign& x)
{
	string s;
	in >> s;
	x = s.c_str();
	return in; 
} 
	
// 重载操作符 <<
ostream& operator << (ostream &out, const bign& x)
{
	out << x.str();
	return out;
} 

int main()
{
#ifdef LOCAL
	freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
#endif
	bign num = 0;
	bign result = 0;
	while(cin >> num && num != 0)
	{
		result += num;
	}
	
	cout << result << endl;
	return 0;
}


你可能感兴趣的:(uva424--BigNumber)