题解 | #浮点数加法#
浮点数加法
https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8
#include <iostream> #include <string> #include <stdlib.h> using namespace std; int main() { string str1, str2; while (cin >> str1 >> str2) { // 注意 while 处理多个 case int found1 = str1.find("."); int found2 = str2.find("."); string longInt,shortInt,integer1,integer2,fraction1,fraction2,longstr,shortstr,resultInt,resultFra; //处理小数部分 fraction1 = str1.substr(found1+1,str1.size()-found1-1); fraction2 = str2.substr(found2+1,str2.size()-found2-1); longstr = (fraction1.size() > fraction2.size())?fraction1:fraction2; shortstr = (longstr == fraction1)?fraction2:fraction1; resultFra = longstr; int addFra = 0;//注意小数进位 for(int i = 0; i < longstr.size();i++){ int j = shortstr.size() - 1 - i; if(i < shortstr.size()){ resultFra[j] = (longstr[j]-'0') + (shortstr[j]-'0')+'0'; resultFra[j] += addFra; addFra = 0; if(resultFra[j] > '9'){ addFra = 1; resultFra[j] =resultFra[j] - ':' + '0'; } } } //加整数部分 integer1 = str1.substr(0,found1); integer2 = str2.substr(0,found2); longInt = (integer1.size() > integer2.size())?integer1:integer2; shortInt = (longInt == integer1)?integer2:integer1; resultInt = longInt; int addInt = 0;//add进位 for(int i = 0; i < longInt.size();i++){ if(i < shortInt.size()){ resultInt[resultInt.size()-1-i] = (longInt[longInt.size()-1-i]-'0')+(shortInt[shortInt.size()-1-i]-'0')+'0'; if(i == 0) resultInt[resultInt.size()-1] += addFra; resultInt[resultInt.size()-1-i] += addInt; addInt = 0; if(resultInt[resultInt.size()-1-i] >'9'){ addInt = 1; resultInt[resultInt.size()-1-i] = resultInt[resultInt.size()-1-i]-':'+'0'; } } if(i >= shortInt.size() && addInt){//注意与shortInt那部分相加完可能有进位 resultInt[resultInt.size()-1-i] += addInt; addInt = 0; } } cout << resultInt << "." << resultFra << endl; } } // 64 位输出请用 printf("%lld")