题解 | #浮点数加法#
浮点数加法
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; }
相当于实现一个加法器