uva 10700 算式的加减乘除的运算优先级,算式的运算顺序处理。

题目:一个只有“+”和“*”的算式,得到的结果最大为先算加法,再算乘法。得到的最小结果为先算乘法,再算加法。

Sample input

 

3
1+2*3*4+5
4*18+14+7*10
3+11+4*1*13*12*8+3*3+8

 

Sample output

 

The maximum and minimum are 81 and 30.
The maximum and minimum are 1560 and 156.
The maximum and minimum are 339768 and 5023.
#include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
queue<char> myque;
queue<char> myque2;
int cal1(){
    int temp1=0,temp2=0,temp3=0;
    char s;
    while(!myque.empty()){
        s=myque.front();
        if(s>='0'&&s<='9') {temp1=10*temp1+(int)(s-'0');myque.pop();}
        if(s=='+'){temp2+=temp1;temp1=0;myque.pop();}
        if(s=='*'){temp3=temp1+temp2;myque.pop();break;}
        if(myque.empty()!=0){temp3=temp1+temp2;}
    }
    return temp3;
}
int CAL1(){
    int temp=1;
    while(!myque.empty()){
        temp=temp*cal1();
    }
    return temp;
}
int cal2(){
    int temp1=0,temp2=1,temp3=1;
    char s;
    while(!myque2.empty()){
        s=myque2.front();
        if(s>='0'&&s<='9') {temp1=10*temp1+(int)(s-'0');myque2.pop();}
        if(s=='*'){temp2=temp2*temp1;temp1=0;myque2.pop();}
        if(s=='+'){temp3=temp1*temp2;myque2.pop();break;}
        if(myque2.empty()!=0){temp3=temp1*temp2;}
    }
    return temp3;
}
int CAL2(){
    int temp=0;
    while(!myque2.empty()){
        temp=temp+cal2();
    }
    return temp;
}
int main(){
    int times;
	char c;
	scanf("%d",×);
	getchar();
	while(times--){
        while(scanf("%c",&c)){
            if(c=='\n') break;
            myque.push(c);
            myque2.push(c);
        }
        printf("The maximum and minimum are %d and %d.\n",CAL1(),CAL2());
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值