题解 | #浮点数加法#

浮点数加法

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;
}
全部评论

相关推荐

Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务