View Code of Problem 132

#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;

int main(void)
{
    string str1, str2;
    while (cin >> str1 >> str2)
    {
        string z[2], x[2], ans[2];
        int flag = 1;
        for (int i = 0; i < str1.size(); i++)
        {
            if (str1[i] == '.')
            {
                flag = 0;
                continue;
            }
            if (flag)
                z[0] += str1[i];
            else
                x[0] += str1[i];
        }
        flag = 1;
        for (int i = 0; i < str2.size(); i++)
        {
            if (str2[i] == '.')
            {
                flag = 0;
                continue;
            }
            if (flag)
                z[1] += str2[i];
            else
                x[1] += str2[i];
        }
        if (x[1].size() > x[0].size())
            swap(x[0], x[1]);
        if (z[1].size() > z[0].size())
            swap(z[0], z[1]);
        int gap = x[0].size() - x[1].size();
        reverse(x[0].begin(), x[0].end());
        reverse(x[1].begin(), x[1].end());
        for (int i = 0; i < gap; i++)
        {
            ans[1] += x[0][i];
        }
        int crary = 0;
        for (int i = 0; i < x[1].size(); i++)
        {
            ans[1] += (x[1][i] - '0' + x[0][gap + i] - '0' + crary) % 10 + '0';
            crary = (x[1][i] - '0' + x[0][gap + i] - '0' + crary) / 10;
        }

        int cnt = 0;
        for (int i = 0; i < ans[1].size(); i++)
        {
            if (ans[1][i] == '0')
                cnt++;
            else
                break;
        }
        reverse(ans[1].begin(), ans[1].end());
        ans[1].resize(ans[1].size() - cnt);
        reverse(z[0].begin(), z[0].end());
        reverse(z[1].begin(), z[1].end());
        for (int i = 0; i < z[1].size(); i++)
        {
            ans[0] += (z[1][i] - '0' + z[0][i] - '0' + crary) % 10 + '0';
            crary = (z[1][i] - '0' + z[0][i] - '0' + crary) / 10;
        }
        for (int i = z[1].size(); i < z[0].size(); i++)
        {
            ans[0] += (z[0][i] - '0' + crary) % 10 + '0';
            crary = (z[0][i] - '0' + crary) / 10;
        }
        if (crary == 1)
            ans[0] += '1';

        reverse(ans[0].begin(), ans[0].end());

        cout << ans[0];
        flag = 0;
        if (ans[1].size() > 0)
                cout << '.' << ans[1] << endl;
        else
            cout << endl;
    }
}

Double click to view unformatted code.


Back to problem 132