题解 | #浮点数加法#
浮点数加法
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;
}
相当于实现一个加法器
查看16道真题和解析
