66pts求条
查看原帖
66pts求条
764666
LostKeyToReach楼主2024/5/23 11:34
#include <iostream>
#include <string>
#include <iomanip>
#include <algorithm>
#include <cassert>
#define int long long
using namespace std;
string str = " +-*/";
signed main() {
	string s;
	getline(cin, s);
	string ns = "";
	for (int i = 0; i < s.size(); i++) {
		if (s[i] != ' ' || (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') || isdigit(s[i])) ns += s[i];
	}
	int num1 = 0, num2 = 0, num3 = 0;
	int vis1 = 0, vis2 = 0, vis3 = 0;
	char flag;
	for (int i = 1; i <= 4; i++) {
		if (ns.find(str[i]) != -1) {
			string ss = ns.substr(0, ns.find(str[i]));
			if (ss != "?") num1 = stoll(ss), vis1 = 1;
			// cout << num1 << " ";
			flag = str[i];
			break;
		}
	}
	string ss = ns.substr(ns.find(flag) + 1, ns.find("=") - ns.find(flag) - 1);
	// cout << ss << endl;
	if (ss != "?") num2 = stoll(ss), vis2 = 1;
	// cout << num2;
	ss = ns.substr(ns.find("=") + 1, ns.size() - ns.find("=") - 1);
	if (ss != "?") {
		num3 = stoll(ss), vis3 = 1;
	}
	// assert(num2 == 0 && vis2);
	// return 0;
	double ans = 0.0;
	if (num1 == 0 && !vis1) {
		if (flag == '+') {
			ans = num3 - num2;
		}
		else if (flag == '-') {
			ans = num2 + num3;
		}
		else if (flag == '/') {
			ans = 1.0 * num2 * num3;
		}
		else {
			ans = 1.0 * num3 / num2;
		}
	}
	else if (num2 == 0 && !vis2) {
		if (flag == '+') {
			ans = num3 - num1;
		}
		else if (flag == '-') {
			ans = num1 - num3;
		}
		else if (flag == '*') {
			ans = 1.0 * num3 / num1;
		}
		else {
			ans = 1.0 * num1 / num3;
		}
	}
	else {
		if (flag == '+') {
			ans = num1 + num2;
		}
		else if (flag == '-') {
			ans = num1 - num2;
		}
		else if (flag == '*') {
			ans = 1.0 * num1 * num2;
		}
		else {
			ans = 1.0 * num1 / num2;
		}
	}
	cout << fixed << setprecision(2) << ans;
}

Submission Link.

2024/5/23 11:34
加载中...