1 条题解

  • 1
    @ 2026-8-20 16:58:17
    using namespace std;
    
    int main() {
        string a, b;
        cin >> a >> b;
    
        int pa = a.find('.'), pb = b.find('.');
        string ai = a.substr(0, pa), af = a.substr(pa + 1);
        string bi = b.substr(0, pb), bf = b.substr(pb + 1);
    
        int fl = max(af.size(), bf.size());
        while (af.size() < fl) af += '0';
        while (bf.size() < fl) bf += '0';
    
        string frac(fl, '0');
        int carry = 0;
        for (int i = fl - 1; i >= 0; i--) {
            int s = (af[i] - '0') + (bf[i] - '0') + carry;
            carry = s / 10;
            frac[i] = '0' + s % 10;
        }
    
        int il = max(ai.size(), bi.size());
        while (ai.size() < il) ai = "0" + ai;
        while (bi.size() < il) bi = "0" + bi;
    
        string integ(il + 1, '0');
        for (int i = il - 1; i >= 0; i--) {
            int s = (ai[i] - '0') + (bi[i] - '0') + carry;
            carry = s / 10;
            integ[i + 1] = '0' + s % 10;
        }
        integ[0] = '0' + carry;
    
        int st = 0;
        while (st < (int)integ.size() - 1 && integ[st] == '0') st++;
        integ = integ.substr(st);
    
        while (frac.size() && frac.back() == '0') frac.pop_back();
    
        cout << integ << "." << frac << endl;
        return 0;
    }
    
    
    

    信息

    ID
    1199
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    37
    已通过
    1
    上传者