View Code of Problem 3855

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string jian(string s1, string s2) {
	string flag("");
	if (s1.size() < s2.size() || s1.size() == s2.size() && s1 < s2) {
		swap(s1, s2);
		flag = "-";
	}
	int len = s1.size() - s2.size(), i = 0, k = 0, y;
	for (; i < len; i++)
		s2 = '0' + s2;
	len = s1.size() - 1;
	for (i = len; i >= 0; i--) {
		y = s1[i] - s2[i] + k;
		if (y >= 0) {
			s1[i] = '0' + y;
			k = 0;
		}
		else {
			s1[i] = '0' + y + 10;
			k = -1;
		}
	}
	for (i = 0; i < len&&s1[0] == '0'; i++)
		s1.erase(0, 1);
	return flag + s1;
}
string jia(string s1, string s2) {
	if (s1.size() > s2.size())swap(s1, s2);
	int len = s2.size() - s1.size();
	for (int i = 0; i < len; i++)
		s1 = '0' + s1;
	int k = 0;
	for (int i = s1.size() - 1; i >= 0; i--)
		if (s1[i] + s2[i] - 2 * '0' + k < 10) {
			s1[i] = s1[i] + s2[i] - '0' + k;
			k = 0;
		}
		else {
			s1[i] = s1[i] + s2[i] - '0' + k - 10;
			k = 1;
		}
	if (k)s1 = '1' + s1;
	return s1;
}
int main() {
	int T; cin >> T;
	while (T--) {
		string s1, s2; cin >> s1;
		int flag = 0;
		if (s1.find('+', 1) != -1)flag = 1;
		int p = max((int)s1.find('+', 1), (int)s1.find('-', 1));
		s2 = s1.substr(p + 1);
		s1.erase(p);
		int sign(1);
		if (s1[0] == '-') {
			s1.erase(0, 1);
			sign = 0;
		}
		if (flag && sign)cout << jia(s1, s2) << endl;
		else if (flag && !sign)cout << jian(s2, s1) << endl;
		else if (!flag && sign)cout << jian(s1, s2) << endl;
		else cout<<'-'<< jia(s1, s2) << endl;
	}
}

Double click to view unformatted code.


Back to problem 3855