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

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

#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 (data)

	{

		tmp = data % 10;    
C++中的高精度运算符重载是指对整数进行大数运算时,通过重载运算符来实现对大数加减乘除等操作。一般情况下,C++内置的整数类型(如int、long等)有一定的位数限制,无法处理超过其表示范围的大数。而通过运算符重载,我们可以自定义一个类来表示大数,并对其进行各种运算操作。 以下是一个简单的示例,展示了如何实现C++中的高精度运算符重载: ```cpp #include <iostream> #include <vector> using namespace std; class BigInteger { private: vector<int> digits; // 用vector存储大数的每一位 public: BigInteger() {} BigInteger(int num) { while (num > 0) { digits.push_back(num % 10); num /= 10; } } BigInteger operator+(const BigInteger& other) const { BigInteger result; int carry = 0; int i = 0; while (i < digits.size() || i < other.digits.size() || carry != 0) { int sum = carry; if (i < digits.size()) { sum += digits[i]; } if (i < other.digits.size()) { sum += other.digits[i]; } result.digits.push_back(sum % 10); carry = sum / 10; i++; } return result; } friend ostream& operator<<(ostream& os, const BigInteger& num) { for (int i = num.digits.size() - 1; i >= 0; i--) { os << num.digits[i]; } return os; } }; int main() { BigInteger a(123456789); BigInteger b(987654321); BigInteger c = a + b; cout << "a + b = " << c << endl; return 0; } ``` 在上述示例中,我们定义了一个名为BigInteger的类,用于表示大数。通过重载加法运算符`+`,我们可以实现对两个BigInteger对象的相加操作。同时,我们还重载了输出流运算符`<<`,以便能够直接输出BigInteger对象的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值