题解 | #浮点数加法#

浮点数加法

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

#include<cstdio>
#include<string>
#include<vector>
using namespace std;
int main() {
    int i;
    vector<char> left;
    vector<char> right;
    char buffer1[100];
    char buffer2[100];
    scanf("%s", buffer1);
    scanf("%s", buffer2);
    string str1 = buffer1;
    string str2 = buffer2;
    string str1_1 = "";
    string str1_2 = "";

    //从.划分数
    int flag = 0;
    for (int i = 0; i < str1.size(); i++) {
        if (str1[i] == '.') {
            flag = 1;
            continue;
        }
        if (flag == 0)
            str1_1 += str1[i];
        else if (flag == 1)
            str1_2 += str1[i];
    }

    string str2_1 = "";
    string str2_2 = "";
    flag = 0;
    for (int i = 0; i < str2.size(); i++) {
        if (str2[i] == '.') {
            flag = 1;
            continue;
        }
        if (flag == 0)
            str2_1 += str2[i];
        else if (flag == 1)
            str2_2 += str2[i];
    }

    //.之后的
    int min = str1_2.size() < str2_2.size() ? str1_2.size() : str2_2.size();
    for (int i = str1_2.size() - 1; i >= min; i--) {
        right.push_back(str1_2[i]);
    }
    for (int i = str2_2.size() - 1; i >= min; i--) {
        right.push_back(str2_2[i]);
    }
    flag = 0;
    for (int i = min - 1; i >= 0; i--) {
        char x = str1_2[i] + str2_2[i] + flag - '0';
        if (x <= '9') {
            right.push_back(x);
            flag = 0;
        } else {
            right.push_back(x - 10);
            flag = 1;
        }
    }

    //.之前

    min = str1_1.size() < str2_1.size() ? str1_1.size() : str2_1.size();
    for (i = 0; i < min ; i++) {
        char a = str1_1[str1_1.size() - i - 1] + str2_1[str2_1.size() - i - 1] + flag -
                 '0';
        if (a <= '9') {
            left.push_back(a);
            flag = 0;
        } else {
            flag = 1;
            left.push_back(a - 10);
        }
    }
    if (flag == 1 && str1_1.empty() && str2_1.empty())
        left.push_back('1');

    while (i < str1_1.size()) {
        left.push_back(str1_1[str1_1.size() - i - 1] + flag);
        flag = 0;
        i++;
    }
    while (i < str2_1.size()) {
        left.push_back(str2_1[str2_1.size() - i - 1] + flag);
        flag = 0;
        i++;
    }
    /*for (i = left.size() - 1; i >= 0; i--)
        printf("%c", left[i]);*/

    //printf("\n%s %s", str2_1.c_str(), str2_2.c_str());
    for (int i = left.size() - 1; i >= 0; i--) {
        printf("%c", left[i]);
    }
    printf(".");
    for (int i = right.size() - 1; i >= 0; i--) {
        printf("%c", right[i]);
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务