题意是给定一个表达式,求这个表达式是运用了哪种规则:
M:乘法优先
L:从左往右
U:ML都符合
I:都不符合
简单的模拟.
#include <bits/stdc++.h>
using namespace std;
#define maxn 111
char a[maxn], n;
long long num;
bool judge1 () {
long long ans = a[0]-'0';
for (int i = 1; i < n; i += 2) {
if (a[i] == '+') {
ans += a[i+1]-'0';
}
else ans *= a[i+1]-'0';
}
return ans == num;
}
vector <long long> gg;
bool judge2 () {
gg.clear ();
long long ans = 0;
for (int i = 0; i < n; i += 2) {
long long cur = a[i]-'0';
if (a[i+1] == '*') {
while (a[i+1] == '*') {
cur *= (a[i+2]-'0');
i += 2;
}
}
gg.push_back (cur);
}
for (int i = 0; i < gg.size (); i++)
ans += gg[i];
return ans == num;
}
int main () {
//freopen ("in", "r", stdin);
while (scanf ("%s", a) == 1) {
scanf ("%lld", &num);
n = strlen (a);
bool ok1 = judge1 (), ok2 = judge2 ();
if (ok1 && ok2) {
printf ("U\n");
}
else if (!ok1 && !ok2) {
printf ("I\n");
}
else if (ok2) {
printf ("M\n");
}
else {
printf ("L\n");
}
}
return 0;
}