具体描述忘了,大概是火星有两种运算符,#和$。
其中,
x#y = 2 * x + 3 * y + 4;
x$y = 3 * x + y + 2;
$优先级高于#
输入:1#2$3$4$5#8#9,
输出:1599
代码实现:
#include <cstdio>
#include <iostream>
#include <stack>
using namespace std;
// #
int xay(int x, int y) {
return 2 * x + 3 * y + 4;
}
// $
int xby(int x, int y) {
return 3 * x + y + 2;
}
int main()
{
string s;
cin >> s;
stack<int> ds;
string num;
int first = -1;
int second = -1;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9') {
num.push_back(s[i]);
}
else {
if (!num.empty()) {
ds.push(atoi(num.c_str()));
num.erase(num.begin(), num.end());
}
if (first >= 0) {
second = ds.top();
ds.pop();
ds.push(xby(first, second));
first = -1;
}
if (s[i] == '$') {
if (first < 0) {
first = ds.top();
ds.pop();
}
}
}
}
if (!num.empty()) {
ds.push(atoi(num.c_str()));
if (first >= 0) {
second = ds.top();
ds.pop();
ds.push(xby(first, second));
first = -1;
}
}
stack<int> dst;
while (!ds.empty()) {
dst.push(ds.top());
ds.pop();
}
int t = -1;
while (!dst.empty()) {
if (t < 0) {
t = dst.top();
}
else {
t = xay(t, dst.top());
}
dst.pop();
}
cout << t;
return 0;
}