题意:给出一个等式,一堆数相乘或者相加,问给出的一个答案是否满足先乘后加或者先左后右的运算规则,如果都满足输出U,都不满足输出I,只满足乘法优先输出M,只满足左边优先输出L。
范围:等式内每个数不超过9
解法:简单模拟即可....根据运算结果判断即可,有一个比较简单的计算方法就是做乘法的时候,把左边乘到右边,然后把左边变为0,最后把所有数全部加起来就是答案啦!
代码:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 0x7fffffff
#define maxn 4050
char s[30],s1[30];
int num[30];
int main()
{
int n,m,c,i,j,len;
int num1,num2;
while(scanf("%s",s)!=EOF)
{
scanf("%d",&c);
num1=num2=0;
len=strlen(s);
memset(num,0,sizeof(num));
for(i=0;i<len;i++){
if(s[i]=='+' || s[i]=='*')continue;
num[i]=s[i]-'0';
}
for(i=0;i<len;i++){
if(s[i]=='*'){
num[i+1]=num[i-1]*num[i+1];
num[i-1]=0;
}
}
num1=0;
for(i=0;i<len;i++){
num1+=num[i];
}
num2=s[0]-'0';
for(i=1;i<len;i++){
if(s[i]=='+'){
num2+=s[i+1]-'0';
}
else if(s[i]=='*'){
num2*=s[i+1]-'0';
}
}
//printf("%d %d\n",num1,num2);
if(num1==c && num2==c)printf("U\n");
else if(num1==c)printf("M\n");
else if(num2==c)printf("L\n");
else printf("I\n");
}
return 0;
}