http://t.cn/Ai8I4v0j

例题0401


    #include <stdio.h>
    #include <iostream>
    #include <string>
    using namespace std;
    string GetInteger(string a) {
        return a.substr(0,a.find('.'));
    }
    string GetFraction(string a) {
        return a.substr(a.find('.') + 1, a.size() - a.find('.'));
    }
    // 使用引用参数 返回信息
    void FractionPlus(string& res, int& carry, string fa, string fb) {
        int size = max(fa.size(), fb.size());
        while (fa.size() < size) {
            fa.push_back('0');
        }
        while (fb.size() < size) {
            fb.push_back('0');
        }
    
        res.resize(size); //给res申请内存空间
        carry = 0;
        for (int i = size - 1; i >= 0; --i) {
            // '0' = '0' 
            // '3' = '0' + 3
            if (fa[i] + fb[i] + carry - '0' > '9') {
                res[i] = fa[i] + fb[i] + carry - '0' - 10;
                carry = 1;
            }
            else {
                res[i] = fa[i] + fb[i] + carry - '0';
                carry = 0;
            }
        }
    
        return;
    }
    void IntegerPlus(string& res, int carry, string ia, string ib) {
        res.clear();
        for (int i = ia.size() - 1, j = ib.size() - 1;
            i >= 0 || j >= 0 || carry == 1;
            --i, --j) {
            if (i >= 0 && j >= 0) {
                if (ia[i] + ib[j] + carry - '0' > '9') {
                    res.insert(res.begin(), ia[i] + ib[j] + carry - '0' - 10);
                    carry = 1;
                }
                else {
                    res.insert(res.begin(), ia[i] + ib[j] + carry - '0');
                    carry = 0;
                }
            }
            else if (i >= 0 && j < 0) {
                if (ia[i]  + carry  > '9') {
                    res.insert(res.begin(), ia[i] + carry - 10);
                    carry = 1;
                }
                else {
                    res.insert(res.begin(), ia[i] + carry );
                    carry = 0;
                }
            }
            else if (i < 0 && j >= 0) {
                if ( ib[j] + carry  > '9') {
                    res.insert(res.begin(),  ib[j] + carry - 10);
                    carry = 1;
                }
                else {
                    res.insert(res.begin(),  ib[j] + carry );
                    carry = 0;
                }
            }
            else {
                res.insert(res.begin(), '1');
                carry = 0;
            }
        }
    
        return;
    }
    int main() {
        //string a = "12345.6789"; //  "11"
        //string b =   "333.33333"; // "99"
        char arra[1000] = { 0 };
        char arrb[1000] = { 0 };
        while (scanf("%s%s", arra, arrb) != EOF) {
            string a = arra;
            string b = arrb;
    
            string ia = GetInteger(a);
            string ib = GetInteger(b);
            string fa = GetFraction(a);
            string fb = GetFraction(b);
    
            string fres;
            int carry;
            FractionPlus(fres, carry, fa, fb);
            string ires;
            IntegerPlus(ires, carry, ia, ib);
    
            printf("%s.%s\n", ires.c_str(), fres.c_str());
        }
        
        return 0;
    }