题解 | 浮点数加法

浮点数加法

https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include<string>
using namespace std;

string GetInteger(string arry)
{
	return arry.substr(0, arry.find('.'));
}

string GetFraction(string arry)
{
	return arry.substr(arry.find('.') + 1, arry.size() - arry.find('.'));
}

void FractionPlus(string &res,string fa,string fb,int &carry)
{
	res.clear();
	int size = max(fa.size(), fb.size());

	while (fa.size() < size)fa.push_back('0');
	while (fb.size() < size)fb.push_back('0');

	for (int i = size - 1; i >= 0; i--)
	{
		if (fa[i] + fb[i] +carry-'0'> '9')
		{
			res.insert(res.begin(), (fa[i] + fb[i]-10 - '0'+carry));
			carry = 1;
		}
		else
		{
			res.insert(res.begin(), (fa[i] + fb[i] - '0' + carry));
			carry = 0;
		}
	}

}

void IntegerPlus(string& res, string ia, string ib,int carry)
{
	res.clear();
	int size = max(ia.size(), ib.size());

	while (ia.size() < size)ia.insert(ia.begin(),'0');
	while (ib.size() < size)ib.insert(ib.begin(), '0');

	for (int i = size - 1; i >= 0; i--)
	{
		if (ia[i] + ib[i] + carry - '0' > '9')
		{
			res.insert(res.begin(), (ia[i] + ib[i] - '0' - 10  + carry));
			carry = 1;
		}
		else
		{
			res.insert(res.begin(), (ia[i] + ib[i] - '0' + carry));
			carry = 0;
		}
	}
	if (carry == 1)
		res.insert(res.begin(), '1');
}

int main()
{
	string a;
	string b;

	while (cin >> a >> b)
	{
		int carry = 0;
		string ia=GetInteger(a);
		string ib=GetInteger(b);
		string fa=GetFraction(a);
		string fb=GetFraction(b);

		string fres;
		string ires;
		FractionPlus(fres, fa, fb, carry);
		IntegerPlus(ires, ia, ib, carry);

		string res = ires + '.' + fres;

		cout << res << "\n";
	}
	


	return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务