思路:

1.分别对其小数部分和整数部分,因为补0位置不同,所以分别对齐(注意对齐整数部分时小数点位置会变化)

2.小数部分加法和整数部分加法一样,用一个函数实现(注意跳过小数点)

3.最后检查结果进位

ps:如果题目还要求去掉小数点后的无效0:

//如果末尾是0或.,删除

        while (str1.back() == '0' || str1.back() == '.') str1.pop_back();

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
void add(string& str1, string& str2, int& inc) {
    int sum = 0;
    for (int i = str1.size() - 1; i >= 0; i--) {
        if (str1[i] == '.') continue;//跳过小数点
        sum = inc + (str1[i] - '0' ) + ( str2[i] - '0');
        str1[i] = sum + '0';
        inc = 0;
        if (sum > 9) {
            str1[i] = (sum - 10) + '0';
            inc = 1;
        }
    }
}
int main() {
    string str1, str2;
    while (getline(cin, str1)) { //输入第一行
        getline(cin, str2);//输入第二行
        int pos1 = str1.find('.');
        int pos2 = str2.find('.');
        //小数部对齐
        while (str1.size() - pos1 > str2.size() - pos2) {
            str2.push_back('0');
        }
        while (str1.size() - pos1 < str2.size() - pos2) {
            str1.push_back('0');
        }
        //整数部分补齐
        while (pos1 > pos2) {
            str2.insert(0, "0");
            pos2++;
        }
        while (pos1 < pos2) {
            str1.insert(0, "0");
            pos1++;
        }
        int inc = 0;
        //两个数相加
        add(str1, str2, inc);
        if (inc) {
            str1.insert(0, "1");
        }
        printf("%s\n", str1.c_str());
    }
    return 0;
}