码迷,mamicode.com
首页 > 其他好文 > 详细

[河南省ACM省赛-第四届] 表达式求值(nyoj 305)

时间:2015-04-01 21:38:51      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

栈的模拟应用:

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<stack>
using namespace std;

string getPostfixExp(string s)
{
    stack<char> sta;// d n x
    string exp; 
    int len = s.size();
    for(int i=0; i<len; i++){
        char ch = s[i]; 
        if(ch == a || ch == m) { //如果是字母
            i += 2; 
            sta.push(s[i]);
        } else if(ch == (){
            sta.push(ch);
        } else if(ch == )){//此时顶一定是( 
            sta.pop();//弹走( 
            exp += " ";
            exp += sta.top();
            sta.pop();
        } else if(ch != ,){ //数字 
            string num; 
            while(s[i] >= 0 && s[i] <= 9){
                num += s[i++];
            } 
            if(exp[0] != NULL)//后缀表达式的第一个一定是数字,用此来避免首位空格 
                exp += " "; 
            exp += num;
            i--;
        } 
    }
    return exp;
}

int calculate(string post)
{
    stack<int>sta;
    int len = post.size();
    for(int i=0; i<len; i++){
        int ch = post[i];
        if(ch >= a) {//如果是运算符 
            int a = sta.top(); sta.pop();
            int b = sta.top(); sta.pop();
            if(ch == d)
                sta.push(a+b);
            else if(ch == x)
                sta.push(max(a, b));
            else if(ch == n)
                sta.push(min(a, b)); 
        } else if(ch !=  ) {//如果为数字 
            int num = 0;
            while(post[i] >= 0 && post[i] <= 9)
                num = num*10+post[i++]-0;
            sta.push(num);
            i--;
        } 
    } 
    return sta.top(); 
}
int main()
{
    freopen("d:\\in.txt", "r", stdin); 
    string s;
    int t;
    cin>>t;
    while(t--) {
        cin>>s;
        string post = getPostfixExp(s);
        cout<<calculate(post)<<endl; 
    }
    return 0;
}

[河南省ACM省赛-第四届] 表达式求值(nyoj 305)

标签:

原文地址:http://www.cnblogs.com/vegg117/p/4385306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!