当前位置: 首页>>代码示例>>C++>>正文


C++ BigData类代码示例

本文整理汇总了C++中BigData的典型用法代码示例。如果您正苦于以下问题:C++ BigData类的具体用法?C++ BigData怎么用?C++ BigData使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了BigData类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: correctData

BigData operator*(BigData & left, BigData & right) {
	correctData(left, right);

	container left_value = left.data;
	container right_value = right.data;

	if (left_value.size() < 1 || right_value.size() < 1)
		return BigData(valueToContainer(0));

	char n = left_value.size();

	if (left_value.size() == 1 || right_value.size() == 1) {

		if (left_value.size() == 1 && right_value.size() == 2) {
			left_value.push_back(0);
		}else if(left_value.size() == 2 && right_value.size() == 1) {
			right_value.push_back(0);
		}
		
		return BigData(valueToContainer(left_value[0] * right_value[0]));
	}
	else {
		BigData a(left.getLeftPart());
		BigData b(left.getRightPart());

		BigData c(right.getLeftPart());
		BigData d(right.getRightPart());

		static int firstCounter = 0;

		BigData ac = a*c;

		BigData ac_(multPow(n, ac.data));
		BigData bd = b*d;
		BigData a_plus_b(a + b);
		BigData c_plus_d(c + d);
		BigData adbc0(a_plus_b*c_plus_d);
		BigData adbc1(adbc0 - ac);
		BigData adbc(adbc1 - bd);
		BigData adbc_(multPow(n / 2, adbc.data));

		if (BigData(adbc) == BigData(valueToContainer(THIRD))){
			firstCounter++;
			cout << firstCounter << endl;
		}

		return BigData(ac_ + adbc_ + bd);
	}
}
开发者ID:VladyslavYefremov,项目名称:PrometheusAlgorithms,代码行数:49,代码来源:karatsuba-algorithm.cpp

示例2: BigData

BigData BigData::operator*(const BigData& bigData)
{
	if (0 == m_llValue || 0 == bigData.m_llValue)
	{
		return BigData(INT64(0));
	}
	if (!IsINT64Owerflow() && !bigData.IsINT64Owerflow())
	{
		if (m_strData[0] == bigData.m_strData[0])
		{
			if (('+' == m_strData[0] && MAX_INT64 / m_llValue >= bigData.m_llValue) || ('-' == m_strData[0] && MAX_INT64 / m_llValue <= bigData.m_llValue))
			{
				return BigData(m_llValue*bigData.m_llValue);
			}
		}
		else
		{
			//-10/2   
			//-10/-2
			if (('+' == m_strData[0] && MIN_INT64 / m_llValue <= bigData.m_llValue) || ('-' == m_strData[0] && MIN_INT64 / m_llValue >= bigData.m_llValue))
			{
				return BigData(m_llValue*bigData.m_llValue);
			}
		}
	}
	return BigData(Mul(m_strData, bigData.m_strData).c_str());
}
开发者ID:hhhh93,项目名称:Vector,代码行数:27,代码来源:BigData.cpp

示例3: BigData

BigData BigData::operator-(const BigData& bigData)
{
	if (!IsINT64Owerflow() && !bigData.IsINT64Owerflow())
	{
		if (m_strData[0] == bigData.m_strData[0])
		{
			return BigData(m_llValue - bigData.m_llValue);
		}
		else
		{
			// 10 + (-8) = 2 > 1// 3 - (-8); 1 - (-8) 
			// -10  -8  3    -8  2  -10 + 3 = -7 <= 
			if (('+' == m_strData[0] && MAX_INT64 + bigData.m_llValue >= m_llValue) ||
				('-' == m_strData[0] && MIN_INT64 + bigData.m_llValue <= m_llValue))
			{
				return BigData(m_llValue - bigData.m_llValue);
			}
		}
	}

	// 1、至少有一个操作数溢出
	// 2、相减的结果一定会溢出
	// "999999999" "-111111"  "-9999999" "1111111"
	std::string strRet;
	if (m_strData[0] != bigData.m_strData[0])
	{
		strRet = Add(m_strData, bigData.m_strData);
	}
	else
	{
		strRet = Sub(m_strData, bigData.m_strData);
	}
	return BigData(strRet.c_str());
}
开发者ID:LI8023NING,项目名称:Linux-Network,代码行数:34,代码来源:BigData.cpp

示例4: BigData

BigData BigData::operator* (const BigData& bigdata)
{
	if (!IsOverFlowINT64() && !bigdata.IsOverFlowINT64())
	{
		if (_value == 0 || bigdata._value == 0)
		{
			return BigData((INT64) 0);
		}
		//10 /2  = 5 >= 3     10 / -2  = -5 <= -4
		if (_pData[0] == bigdata._pData[0]) 
		{
			if ((_pData[0] == '+' && LLONG_MAX / _value >= bigdata._value) ||
				(_pData[0] == '-' && LLONG_MAX / _value <= bigdata._value))
			{
				return BigData(_value * bigdata._value);
			}
		}
		else
		{
			// -10 / 2 = -5 <= -4  -10 / -2 = 5 >= 4 
			if ((_pData[0] == '+' && (LLONG_MIN /_value <= bigdata._value)) ||
				(_pData[0] == '-' && (LLONG_MIN / _value >= bigdata._value)))
			{
				return BigData(_value * bigdata._value);
			}
		}
	}

	return BigData((char *)Mul(_pData, bigdata._pData).c_str());
}
开发者ID:Stonelog,项目名称:project,代码行数:30,代码来源:BigData.cpp

示例5: BigData

BigData BigData::operator*(const BigData& bigdata)
{
	if ((0 == _value) || (0 == bigdata._value))
	{
		return BigData(INT64(0));
	}
	if (IsINT64OverFlow() && bigdata.IsINT64OverFlow())
	{
		if (_strData[0] == bigdata._strData[0])
		{
			if (((_value > 0) && ((long long)MAX_INT64 / _value >= bigdata._value)) ||
				((_value < 0) && ((long long)MAX_INT64 / _value <= bigdata._value)))   //同号相乘 结果为正
			{
				return BigData(_value*bigdata._value);
			}
		}
		else
		{
			if (((_value > 0) && ((long long)MIN_INT64 / _value <= bigdata._value)) ||
				((_value < 0) && ((long long)MIN_INT64 / _value >= bigdata._value)))      //异号相乘 结果为负
			{
				return BigData(_value*bigdata._value);
			}
		}
	}

	return BigData(Mul(_strData, bigdata._strData).c_str());
}
开发者ID:needless-saying,项目名称:Big_Data_Operation,代码行数:28,代码来源:BigData.cpp

示例6: assert

BigData BigData:: operator%(const BigData& bigdata)
{
	if (bigdata._strData[1] == '0')
	{
		cout << "除数为 0 或对0求模" << endl;
		assert(0);
	}
	if (_strData[1] == 0)
		return INT64(0);
	if ((IsINT64OverFlow()) && bigdata.IsINT64OverFlow())
	{
		return _value % bigdata._value;
	}
	if (_strData.size() < bigdata._strData.size())
	{
		return BigData(_strData.c_str());
	}
	else if (_strData.size() == bigdata._strData.size())
	{
		if (strcmp(_strData.c_str() + 1, bigdata._strData.c_str() + 1) < 0)
			return INT64(0);
		if (strcmp(_strData.c_str() + 1, bigdata._strData.c_str() + 1) == 0)
		{
			return INT64(0);
		}
	}
	return BigData(Mod(_strData, bigdata._strData).c_str());
}
开发者ID:needless-saying,项目名称:Big_Data_Operation,代码行数:28,代码来源:BigData.cpp

示例7: BigData

BigData BigData::operator-(const BigData& bigData)
{
	if (!IsINT64Overflow() && !bigData.IsINT64Overflow())
	{
		if (m_strData[0] == bigData.m_strData[0])
		{
			return BigData(m_llValue - bigData.m_llValue);
		}
		else
		{
			if ((m_strData[0] == '+' && MAX_INT64 + bigData.m_llValue >= m_llValue)
				|| (m_strData[0] == '-' && MIN_INT64 + bigData.m_llValue <= m_llValue))
			{
				return BigData(m_llValue - bigData.m_llValue);
			}
		}
	}
	std::string strret;
	if (m_strData[0] != bigData.m_strData[0])
	{
		strret = Add(m_strData, bigData.m_strData);
	}
	else
	{
		strret = Sub(m_strData, bigData.m_strData);
	}
	return BigData(strret.c_str());
}
开发者ID:xyzbaihaiping,项目名称:BigData,代码行数:28,代码来源:BigData.cpp

示例8: assert

	BigData operator /(const BigData &b)
	{
		if (b._value == 0)
		{
			assert(false);
		}
		if (_strdata.size() < b._strdata.size() || (_strdata.size() == b._strdata.size() && strcmp(_strdata.c_str() + 1, b._strdata.c_str() + 1) < 0))
		{
			return BigData("0");
		}
		if (!Isoverflow() && !b.Isoverflow())
		{
			return BigData(_value / b._value);
		}
		if (strcmp(_strdata.c_str() + 1, b._strdata.c_str() + 1) == 0)
		{
			if (_strdata[0] == b._strdata[0])
			{
				return BigData(1);
			}
			else
			{
				return BigData(-1);
			}
		}
		if (!b.Isoverflow() && ((b._value == 1) || (b._value == -1)))
		{
			if (b._value == 1)
			{
				return *this;
			}
			else
			{
				if (_strdata[0] == '-')
				{
					_strdata[0] = '+';
				}
				else
				{
					_strdata[0] = '-';
				}
			}
		}
		return BigData((char *)(DIV(_strdata, b._strdata)).c_str());
			
	}
开发者ID:caibeihaha,项目名称:dashuju,代码行数:46,代码来源:b.cpp

示例9: assert

BigData BigData::operator/(const BigData& bigData)
{
	if (bigData.m_llValue == 0)
	{
		assert("³ýÊý²»ÄÜΪ0");
		return BigData(INT64(0));
	}
	if (!IsINT64Overflow() && bigData.IsINT64Overflow())
	{
		return BigData(m_llValue / bigData.m_llValue);
	}
	return BigData(Div(m_strData, bigData.m_strData).c_str());
}
开发者ID:xyzbaihaiping,项目名称:BigData,代码行数:13,代码来源:BigData.cpp

示例10: assert

//除
BigData BigData::operator /(const BigData& bigData)
{
	if (0 == bigData.m_llValue)
	{
		assert("除数不能为0!");
		return BigData(INT64(0));
	}

	if (!IsINT64Owerflow() && !bigData.IsINT64Owerflow())
	{
		return BigData(m_llValue / bigData.m_llValue);
	}

	return BigData(Div(m_strData, bigData.m_strData).c_str());
}
开发者ID:LI8023NING,项目名称:Linux-Network,代码行数:16,代码来源:BigData.cpp

示例11: BigData

BigData BigData::operator-(const BigData& bigData)
{
	//左右操作数都没有溢出
	if (!_IsINT64OverFlow() && !bigData._IsINT64OverFlow())
	{
		//同号相减一定不会溢出
		if (_strData[0] == bigData._strData[0])
		{
			return BigData(_value - bigData._value);
		} 
		//异号相减有可能溢出或者不溢出
		else
		{
			//以下是异号不溢出的情况
			//正 - 负	负 - 正
			if ((_strData[0] == '+' && (MAX_INT64 + bigData._value) >= _value) || 
				(_strData[0] == '-' && (MIN_INT64 + bigData._value) <= _value))
			{
				return BigData(_value - bigData._value);
			}
		}
	}

	//当走到这里时,一定是这两种情况:
	//(1)操作数至少有一个已经溢出
	//(2)两个没有溢出的操作数结果相减结果溢出
	if (_strData[0] != bigData._strData[0])
	{
		//两个操作数异号,有可能是(正 - 负),也有可能是(负 - 正)的情况
		if (_strData[0] == '+')
		{
			//左操作数是正数,右操作数是负数
			//正 - 负 = 正 + 正 ------将右操作数转成正整数,调用_Add()函数
			(char)bigData._strData[0] = '+';//因为bigData是const对象,所以要强转成(char)才可以修改它的符号位
		}
		else	//_strData[0] == '-'
		{
			//左操作数是负数,右操作数是正数
			//负 - 正 = 负 + 负 -------- 将右操作数转成负数
			(char)bigData._strData[0] = '-';			
		}
		return BigData((char*)_Add(_strData,bigData._strData).c_str());
	}

	//同号相减调用_Sub函数
	return BigData((char*)_Sub(_strData,bigData._strData).c_str());
}
开发者ID:XHXaiXXR,项目名称:code,代码行数:47,代码来源:BigData.cpp

示例12: BigData

	BigData operator +(const BigData &b)
	{
		//判断数是否溢出
		//溢出:两个数中至少有一个溢出   两个数的结果溢出
		if (!Isoverflow() && !b.Isoverflow())
		{
			if (_strdata[0] != b._strdata[0])
			{
				return BigData(_value + b._value);
			}
			else if ((_strdata[0] == '+'&& MAX - _value >= b._value) || (_strdata[0] == '-'&&MIN - _value <= b._value))
			{
				return BigData(_value + b._value);
			}
		}
		return BigData((char *)(ADD(_strdata, b._strdata)).c_str());
	}
开发者ID:caibeihaha,项目名称:dashuju,代码行数:17,代码来源:b.cpp

示例13: assert

BigData BigData::operator/(const BigData& bigData)
{
	//除数不能为0(右操作数不能为0)
	if (!bigData._IsINT64OverFlow() && bigData._value == 0)
	{
		// 除数为0就直接崩溃报错,这里其实抛出异常更好
		assert(false);
	}
	//左操作数为0,结果就为0
	if (!_IsINT64OverFlow() && _value == 0)
	{
		//return BigData(0);不能直接传0,类型不匹配,需要强制类型转换
		return BigData((INT64)0);
	}
	//左操作数小于右操作数,结果也为0
	//(1)左操作数的位数比右操作数位数少	(2)左右操作数位数相同,但是左操作数比右操作数小(考虑用strcmp())
	if ((_strData.size() < bigData._strData.size()) ||
		(_strData.size() == bigData._strData.size() &&
		std::strcmp(_strData.c_str() + 1,bigData._strData.c_str() + 1) == -1))
	{
		return BigData((INT64)0);
	}
	//(不必判断左右操作数是否溢出)左右操作数相等时(不包括符号位),返回(正负1)
	if (_strData.size() == bigData._strData.size() && 
		std::strcmp(_strData.c_str() + 1,bigData._strData.c_str() + 1) == 0)
	{
		if (_strData[0] == bigData._strData[0])
			return BigData((INT64)1);
		else
			return BigData((INT64)-1);
	}
	//如果右操作数为(正负1),结果为(正负左操作数)
	if (!bigData._IsINT64OverFlow())
	{
		if (bigData._value == 1)
		{
			return *this;
		} 
		else if (bigData._value == -1)//记住这里千万不能用else,要用else if()
		{
			std::string tmp = _strData;
			if (tmp[0] == '+')
			{
				tmp[0] = '-';
			}
			else
			{
				tmp[0] = '+';
			}

			return BigData((char*)tmp.c_str());
		}
	}
	//如果两个操作数都没有溢出并且不满足上面的任意条件,那么则走到这里
	if (!_IsINT64OverFlow() && !bigData._IsINT64OverFlow())
	{
		//两个操作数相除,是不存在溢出的问题的
		return BigData(_value / bigData._value);
	}
	//至少有一个操作数溢出
	std::string strtmp = _Div(_strData,bigData._strData);
	if (_strData[0] == bigData._strData[0])
		strtmp[0] = '+';
	else
		strtmp[0] = '-';
	return BigData((char*)strtmp.c_str());
}
开发者ID:XHXaiXXR,项目名称:code,代码行数:67,代码来源:BigData.cpp


注:本文中的BigData类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。