大数加减乘除---C++运算符重载

本文详细介绍了如何在C++中实现大数的加减乘除操作,通过运算符重载技术,使得大数运算更加便捷。内容涵盖了大数的表示、重载原理及具体实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include <iostream>

#include <typeinfo>

#include <string>

#include <vector>

#include <iterator>

using namespace std;

template<typename T>

void _swap(T &a, T &b)

{

	T tmp = T();

	tmp = a;

	a = b;

	b = tmp;

}

class BigData

{

public:

	//0初始化

	BigData(){}         

	BigData(const char *src);

	BigData(bool flag,int size);

	BigData(int data);

	BigData(vector<int>& src);

	BigData(string &src);

	BigData operator =(const BigData &data);

	BigData(const BigData&data);

	BigData(bool sign,const BigData&data);

	bool operator >(const BigData &data) const;

	bool operator <(const BigData &data) const;

	bool operator ==(const BigData &data) const;

	bool operator !=(const BigData &data) const;

	bool operator >=(const BigData &data) const;

	bool operator <=(const BigData &data) const;

	BigData operator -();               //取反运算符

	BigData operator+(const BigData &src);

	BigData operator-(const BigData &src); 	

	BigData operator *(const BigData &data);

	BigData operator /(const BigData &data);

	BigData operator +=(const BigData &daat);

	BigData operator -=(const BigData &data);

	BigData operator *=(const BigData &daat);

	BigData operator /=(const BigData &data);

	BigData operator ++();   //前置++

	BigData operator --();

	BigData operator ++(int);//后置++

	BigData operator --(int);

	void show()

	{

		if (_data.size() == 0)

		{

			cout <<"0"<<endl;

			return;

		}

		if (!_sign)

		{

			cout << "-";

		}

		copy(_data.rbegin(), _data.rend(), ostream_iterator<int>(cout, ""));

		cout << endl;

	}

private:

	vector<int> _data;

	bool _sign;

};

BigData::BigData(const char *src)

{

	_sign = true;

	if (src[0] == '-')

	{

		_sign = false;

	}	

	int len = strlen(src);

	int min = 0;

	if (!_sign)

	{

		min = 1;

	}

	for (int i = len - 1; i >= min; i--)

	{

		if (src[i] == '-' && i == 0)

		{

			_sign = false;

			break;

		}

		_data.push_back(src[i] - '0');

	}

}

BigData::BigData(int data)

{

	if (data < 0)

	{

		_sign = false;

	}

	else

	{

		_sign = true;

	}

 

	int tmp = 0;

	while 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值