UVALive6833->数据结构
题意:
给出一个式子,只包含乘法和加法,判断这个式子按照从左向右的顺序计算和按照乘法优先的次序计算的结果是否为所需要的答案。
题解;
顺序计算只需要从左向右依次处理即可,但是要按照运算符优先级计算时,需要先把中缀表达式转变成后缀表达式之后才能计算。
代码:
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std ;
char str[30] ;
int order_cal()
{
int sum = str[0] - '0' ;
for(int i = 1 ; str[i] != '\0' ; i += 2)
{
if(str[i] == '+') sum += (str[i+1]-'0') ;
else sum *= (str[i+1]-'0') ;
}
return sum ;
}
int cal()
{
int sum = str[0] - '0' , t =0 ;
for(int i = 2 ; str[i] != '\0' ; i += 2)
{
if(str[i-1] == '*')
{
if(t == 0)
{
sum -= str[i-2] - '0' ;
t = str[i-2] - '0' ;
t *= str[i] - '0' ;
}
else t *= str[i] -'0' ;
}
else
{
sum += str[i] - '0' ;
sum += t ;
t = 0 ;
}
}
sum += t ;
return sum ;
}
int main()
{
int ans , sum1 , sumrig ;
while(scanf("%s" , str) != EOF)
{
scanf("%d" , &ans) ;
sum1 = order_cal() ;
sumrig = cal() ;
//cout << sum1 << " "<< sumrig << endl ;
if(sum1 == ans && sum1 == sumrig) printf("U\n") ;
else if(sum1 == ans) printf("L\n");
else if(sumrig == ans) printf("M\n") ;
else printf("I\n") ;
memset(str,'\0' , sizeof(str)) ;
}
return 0 ;
}