题解 | 浮点数加法
浮点数加法
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;
}