View Code of Problem 132

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<climits>
#include<cmath>
#include<map>
#include<set>
#include<queue>

using namespace std;


int main()
{
	string a, b;
	while (cin >> a >> b) {

		if (a.find('.') == a.npos)
			a += '.';

		if (b.find('.') == b.npos)
			b += '.';

		int lena = a.find('.');
		int lenb = b.find('.');

		while (lena < lenb) {

			a = '0' + a;
			lena++;
		}
			
		while (lenb < lena) {

			b = '0' + b;
			lenb++;
		}

		while (a.size() < b.size())
			a += "0";

		while (b.size() < a.size())
			b += "0";

		int pos = a.size() - 1;
		int flag = 0;
		string res;
		while (pos >= 0) {

			if (a[pos] == '.') {

				res = "." + res;
				pos--;
				continue;
			}

			int add = (a[pos] - '0') + (b[pos] - '0');

			if (flag == 1) {

				add++;
				flag = 0;
			}

			if (add >= 10) {

				add -= 10;
				flag = 1;
			}

			res = to_string(add) + res;

			pos--;
		}

		if (flag == 1)
			res = "1" + res;

		if (res.find('.') == res.npos) {

			cout << res << endl;
			continue;
		}

		flag = 0;
		pos = res.size() - 1;
		while (res[pos] != '.') {

			if (res[pos] != '0') {

				flag = 1;
				break;
			}

			pos--;
		}

		if (flag == 0) {

			res = res.substr(0, res.find('.'));
		}
		else {

			res = res.substr(0, pos + 1);
		}

		cout << res << endl;
	}
}

Double click to view unformatted code.


Back to problem 132