本文整理汇总了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);
}
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}
示例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());
}