十进制数据相加(大数据)

#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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值