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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值