题解 | #浮点数加法#

浮点数加法

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

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main() {
    string str1, str2;
    while (cin >> str1 >> str2) { // 注意 while 处理多个 case
        int found1 = str1.find(".");
        int found2 = str2.find(".");
        string longInt,shortInt,integer1,integer2,fraction1,fraction2,longstr,shortstr,resultInt,resultFra;
        //处理小数部分
        fraction1 = str1.substr(found1+1,str1.size()-found1-1);
        fraction2 = str2.substr(found2+1,str2.size()-found2-1);
        longstr = (fraction1.size() > fraction2.size())?fraction1:fraction2;
        shortstr = (longstr == fraction1)?fraction2:fraction1;
        resultFra = longstr;
        int addFra = 0;//注意小数进位
        for(int i = 0; i < longstr.size();i++){
            int j = shortstr.size() - 1 - i;
            if(i < shortstr.size()){
                resultFra[j] = (longstr[j]-'0') + (shortstr[j]-'0')+'0';
                resultFra[j] += addFra;
                addFra = 0;
                if(resultFra[j] > '9'){
                    addFra = 1;
                    resultFra[j] =resultFra[j] - ':' + '0';
                }
            }
        }
        //加整数部分
        integer1 = str1.substr(0,found1);
        integer2 = str2.substr(0,found2);
        longInt = (integer1.size() > integer2.size())?integer1:integer2;
        shortInt = (longInt == integer1)?integer2:integer1;
        resultInt = longInt;
        int addInt = 0;//add进位
        for(int i = 0; i < longInt.size();i++){
            if(i < shortInt.size()){
                resultInt[resultInt.size()-1-i] = (longInt[longInt.size()-1-i]-'0')+(shortInt[shortInt.size()-1-i]-'0')+'0';
                if(i == 0) resultInt[resultInt.size()-1] += addFra;
                resultInt[resultInt.size()-1-i] += addInt;
                addInt = 0;
                if(resultInt[resultInt.size()-1-i] >'9'){
                    addInt = 1;
                    resultInt[resultInt.size()-1-i] = resultInt[resultInt.size()-1-i]-':'+'0';
                }
            }
            if(i >= shortInt.size() && addInt){//注意与shortInt那部分相加完可能有进位
                resultInt[resultInt.size()-1-i] += addInt;
                addInt = 0;
            }
        }
        
        cout << resultInt << "." << resultFra << endl;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

陈逸轩1205:才105 哥们在养生呢
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 11:55
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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