#ifdef UNICODE
typedef wstring _tstring;
#else
typedef string _tstring;
#endif
/***********************************************************************
函数名称 :AddBigData
函数功能 :两个大数据进行相加(必须为正整数 )
函数参数 : 参数列表格式 [_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;
}
/***********************************************************************
函数名称 :AddBigData
函数功能 :两个大数据数值相加(可以为浮点型)
函数参数 : 参数列表格式 [_IN_ _OUT_ _OPTION_] 参数名 说明信息
@param _tstring s _IN_ 输入的第一个字符串
@param _tstring r _IN_ 输入的第二个字符串
返回值 : @return _tstring _OUT_ 输出的两个字符串相加的结果
------------------------------------------------------------------------
备注 :
输入的参数的要求:“必须是正数”,但是可以是浮点型的数据
如果确保数据是正整数的话,请使用AddBigDataAux,这个函数运行的效率更高
如果不能够保证输入参数是正整数的话,请使用AddBigData这个函数
------------------------------------------------------------------------
示例 :
************************************************************************/
_tstring AddBigData(_tstring s, _tstring r)
{
//先分别找到两个浮点型数的整数部分和浮点型部分
size_t pos1 = s.find(L'.');
size_t pos2 = r.find(L'.');
_tstring SInt, SFac, RInt, RFac;
if (pos1==_tstring::npos)//如果没有找到的话
{
SInt = s;
SFac = L"";
}
else
{
SInt = s.substr(0, pos1);
SFac = s.substr(pos1+1);
}
if (pos2==_tstring::npos)
{
RInt = r;
RFac = L"";
}
else
{
RInt = r.substr(0, pos2);
RFac = r.substr(pos2 + 1);
}
_tstring Int, Fac;//整数相加的结果、浮点数相加的结果
if (SFac.length()>RFac.length())
{
RFac.insert(RFac.end(), SFac.length() - RFac.length(), '0');
}
else
{
SFac.insert(SFac.end(), RFac.length() - SFac.length(), '0');
}
Fac = AddBigDataAux(SFac, RFac);
Int = AddBigDataAux(SInt, RInt);
if (Fac.length()>SFac.length())//如果相加之后的长度>原有的长度的话,说明发生了进制
{
Int = AddBigDataAux(Int, L"1");//整数部分+1
Fac.erase(Fac.begin());//小于部分减去前面1
Fac.insert(Fac.begin(), L'.');//
}
else//说明没有发生进制的情况
{
Fac.insert(Fac.begin(), L'.');
}
return Int+Fac;
}