题解 | #浮点数加法#

浮点数加法

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

#include <iostream>
#include <string>

std::string addFloats(const std::string& num1, const std::string& num2) {
    // 寻找小数点的位置
    size_t dot1 = num1.find('.');
    size_t dot2 = num2.find('.');

    // 获取整数部分和小数部分
    std::string intPart1 = num1.substr(0, dot1);
    std::string fracPart1 = num1.substr(dot1 + 1);
    std::string intPart2 = num2.substr(0, dot2);
    std::string fracPart2 = num2.substr(dot2 + 1);

    // 补齐小数部分长度
    while (fracPart1.length() < fracPart2.length()) {
        fracPart1 += '0';
    }
    while (fracPart2.length() < fracPart1.length()) {
        fracPart2 += '0';
    }

    // 进行相加操作
    std::string result = "";
    int carry = 0;

    for (int i = fracPart1.length() - 1; i >= 0; --i) {
        int digit1 = fracPart1[i] - '0';
        int digit2 = fracPart2[i] - '0';
        int sum = digit1 + digit2 + carry;
        carry = sum / 10;
        result = static_cast<char>(sum % 10 + '0') + result;
    }

    // 处理整数部分
    result = "." + result;
    int len = std::max(intPart1.length(), intPart2.length());
    
    for (int i = 0; i < len; ++i) {
        int digit1 = i < intPart1.length() ? intPart1[intPart1.length() - 1 - i] - '0' :
                     0;
        int digit2 = i < intPart2.length() ? intPart2[intPart2.length() - 1 - i] - '0' :
                     0;
        int sum = digit1 + digit2 + carry;
        carry = sum / 10;
        result = static_cast<char>(sum % 10 + '0') + result;
    }

    // 处理最后的进位
    if (carry > 0) {
        result = static_cast<char>(carry + '0') + result;
    }

    return result;
}

int main() {
    std::string num1, num2;

    // 读取两个加数
    while (std::getline(std::cin, num1)) {
        std::getline(std::cin, num2);

        // 计算和
        std::string sum = addFloats(num1, num2);

        // 输出和
        std::cout << sum << std::endl;

        num1.clear();
        num2.clear();
    }


    return 0;
}

相当于实现一个加法器

全部评论

相关推荐

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