C++字符串实现任意实数加法

C++编程
根据逢十进一的规则,编程用字符串实现任意实数相加,小数点后超过7位该怎么编写

基于Monster 组和GPT的调写:


#include <iostream>
#include <string>

using namespace std;

string addRealNumber(string num1, string num2) {
    string res = "";
    int len1 = num1.size(), len2 = num2.size();
    int dot1 = num1.find('.'), dot2 = num2.find('.');
    int lenDot1 = (dot1 == string::npos ? 0 : len1 - dot1 - 1);
    int lenDot2 = (dot2 == string::npos ? 0 : len2 - dot2 - 1);
    int maxLenDot = max(lenDot1, lenDot2);
    int carry = 0;
    int i = len1 - 1, j = len2 - 1;
    for (; i >= 0 && j >= 0; --i, --j) {
        if (num1[i] == '.') continue;
        int sum = num1[i] - '0' + num2[j] - '0' + carry;
        res = char(sum % 10 + '0') + res;
        carry = sum / 10;
    }
    for (; i >= 0; --i) {
        if (num1[i] == '.') continue;
        int sum = num1[i] - '0' + carry;
        res = char(sum % 10 + '0') + res;
        carry = sum / 10;
    }
    for (; j >= 0; --j) {
        if (num2[j] == '.') continue;
        int sum = num2[j] - '0' + carry;
        res = char(sum % 10 + '0') + res;
        carry = sum / 10;
    }
    if (carry > 0) res = char(carry + '0') + res;
    int dotPos = res.size() - maxLenDot - 1;
    if (maxLenDot > 0) res.insert(dotPos + 1, ".");
    if (maxLenDot > 7) res = res.substr(0, dotPos + 8);
    return res;
}

int main() {
    string num1, num2;
    cout << "请输入两个实数: ";
    cin >> num1 >> num2;
    string res = addRealNumber(num1, num2);
    cout << "结果是: " << res << endl;
    return 0;
}