题解 | #浮点数加法#
浮点数加法
http://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string str1,str2;
while(cin>>str1>>str2)
{
int pos1 = str1.find(".");
int pos2 = str2.find(".");
string x1=str1.substr(0,pos1);//保留str1的整数部分
string y1=str1.substr(pos1 + 1);//保留str1的小数部分
string x2=str2.substr(0,pos2);//保留str2的整数部分
string y2=str2.substr(pos2 + 1);//保留str2的小数部分
if(x1.length()<x2.length()) //保证长串在前面
swap(x1, x2);
if(y1.length()<y2.length())
swap(y1, y2);
int f=0; //保留进位信息
//小数部分高位对齐,从低位开始相加,结果保留在长串中
for(int i = y2.length()-1;i >= 0;i--)
{
int a=y1[i]-'0'+y2[i]-'0'+f;
y1[i]=a % 10 + '0';
f = a / 10;
}
//整数部分先逆值,然后从低位开始相加
reverse(x1.begin(), x1.end());
reverse(x2.begin(), x2.end());
for(int i = 0; i < x2.size(); ++i)
{
int b = x1[i]-'0' + x2[i]-'0' + f;
x1[i] = b % 10 + '0';
f = b / 10;
}
for(int i = x2.size(); i < x1.size(); ++i)
{
int b = x1[i]-'0' + f;
x1[i] = b % 10 + '0';
f = b / 10;
}
if(f == 1)
x1 = x1 + '1';
reverse(x1.begin(), x1.end());
cout << x1 << "." << y1 << endl;
}
return 0;
}