题解 | #浮点数加法#
浮点数加法
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]); } }