#ifdef UNICODE
typedef wstring _tstring;
#else
typedef string _tstring;
#endif
/***********************************************************************
函数名称 :AddBigDataAux
函数功能 :两个大数据进行相加(必须为正整数 )
函数参数 : 参数列表格式 [_IN_ _OUT_ _OPTION_] 参数名 说明信息
@param _tstring s _IN_ 第一个相加的结果
@param _tstring r _IN_ 第二个相加的结果
返回值 : @return _tstring 两个整数相加的结果
------------------------------------------------------------------------
备注 :
输入的参数的要求:“必须是正整数”
如果确保数据是正整数的话,请使用AddBigDataAux,这个函数运行的效率更高
如果不能够保证输入参数是正整数的话,请使用AddBigData这个函数
------------------------------------------------------------------------
示例 :
************************************************************************/
_tstring AddBigDataAux(_tstring s, _tstring r) {
int re = 0;
_tstring digit;
if (r.length() < s.length())
r.insert(r.begin(), s.length() - r.length(), '0');
else if (r.length() > s.length())
s.insert(s.begin(), r.length() - s.length(), '0');
for (int i = s.length() - 1; i >= 0; --i) {
int a = (int(s[i] + r[i]) + re - 96);
digit.insert(digit.begin(), char(a % 10 + 48));
re = a / 10;
}
if (re != 0)
digit.insert(digit.begin(), char(re + 48));
return digit;
}
/***********************************************************************
函数名称 :MulBigDataAux
函数功能 :两个大数据相乘(必须是正整数)
函数参数 : 参数列表格式 [_IN_ _OUT_ _OPTION_] 参数名 说明信息
@param _tstring s _IN_ 第一个大数据相乘的数据
@param _tstring c _IN_ 第二个大数据相乘的数据
返回值 : @return _tstring _IN_ 返回两个大数据相乘的结果
------------------------------------------------------------------------
备注 :
输入的参数的要求:“必须是正整数”
如果确保数据是正整数的话,请使用MulBigDataAux,这个函数运行的效率更高
如果不能够保证输入参数是正整数的话,请使用MulBigData这个函数
------------------------------------------------------------------------
示例 :
************************************************************************/
_tstring MulBigDataAux(_tstring s, _tstring c) {
_tstring fina = L"";
for (int j = c.length() - 1; j >= 0; j--) {
_tstring digit = L"";
int re = 0;
for (int i = s.length() - 1; i >= 0; i--) {
int a = int(c[j] - '0')*int(s[i] - '0') + re;
digit.insert(digit.begin(), char(a % 10 + 48));
re = a / 10;
}
if (re != 0)digit.insert(digit.begin(), char(re + 48));
digit.append((c.length() - j - 1), '0');
fina = AddBigDataAux(fina, digit);
}
return fina;
}
/***********************************************************************
函数名称 :MulBigData
函数功能 :两个大数据相乘(可以是浮点型数据)
函数参数 : 参数列表格式 [_IN_ _OUT_ _OPTION_] 参数名 说明信息
@param _tstring s _IN_ 第一个大数据相乘的数据
@param _tstring r _IN_ 第二个大数据相乘的数据
返回值 : @return _tstring _IN_ 返回两个大数据相乘的结果
------------------------------------------------------------------------
备注 :
输入的参数的要求:“必须是正数”,但是可以是浮点型数据
如果确保数据是正整数的话,请使用MulBigDataAux,这个函数运行的效率更高
如果不能够保证输入参数是正整数的话,请使用MulBigData这个函数
------------------------------------------------------------------------
示例 :
************************************************************************/
_tstring MulBigData(_tstring s, _tstring r)
{
size_t pos1 = s.find(L'.');
size_t pos2 = r.find(L'.');
size_t Len = 0;
if (pos1 != _tstring::npos)//如果没有找到的话
{
Len += (s.length() - pos1-1);
s.erase(pos1,1);
}
if (pos2 != _tstring::npos)
{
Len += (r.length() - pos2-1);
r.erase(pos2,1);
}
//去除前导的0
while (true)
{
if (s[0]==L'0')
{
s.erase(s.begin());
}
else
{
break;
}
}
while (true)
{
if (r[0]==L'0')
{
r.erase(r.begin());
}
else
{
break;
}
}
_tstring Int;//整数相乘的结果
Int = MulBigDataAux(s, r);
if (Int.length()>Len)
{
Int.insert(Int.length() - Len,1, L'.');
}
else
{
while (Int.length()<=Len)
{
Int.insert(Int.begin(), L'0');
}
Int.insert(Int.begin() + 1, L'.');
}
return Int;
}