luogu P1449 后缀表达式 x

 

题目描述

所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。

输入输出格式

输入格式:

 

输入:后缀表达式

 

输出格式:

 

输出:表达式的值

 

输入输出样例

输入样例#1:
3.5.2.-*7.+@
输出样例#1:
16

说明

字符串长度,1000内。

思路:

  如题目所述,’@’为表达式的结束符号,‘.’为操作数的结束符号.

  所以最后一定是用'@'做结尾的,然后又因为读入的时候是从0开始读入,而i又是从0开始进行,所以i最终循环到strlen(s)-2即可[s-1的话是字符串最后'@'的下标,我们不考虑他,所以-2]

  然后其他的就用后缀表达式的方法去做就好.

代码酱来也~

 

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cstdlib>

using namespace std;

char c[2560];
int stt[1111];

int st(char c[2560])
{
    int i=0,top=0,x;
    while(i<=strlen(c)-2)
    {
        switch(c[i])
        {
            case '+':
                ///先弹出顶端的数,将顶端下方的数,更改为弹出的数与其之和
                /*
                top--;
                stt[top]=stt[top+1]+stt[top];
                ///stt[top+1]是刚刚弹出来的最顶端的数
                ///以下的各种均能够这样写,只是更改一下符号而已 
                */ 
                stt[--top]+=stt[top+1];
                break;
            case '-':
                stt[--top]-=stt[top+1];
                break;
            case '*':
                stt[--top]*=stt[top+1];
                break;
            case '/':
                stt[--top]/=stt[top+1];
                break;
            default:
                x=0;
                while(c[i]!='.')
                ///从题目中得知,'.'是操作数的结束标志,
                ///所以如果不是'.'以及各种符号就是操作的数字 
                    x=x*10+c[i]-'0',i++;///有可能是多位数 
                stt[++top]=x;///入栈 
                break;
        }
        i++;///继续操作下一字符 
    }
    return stt[top];///最后返回最终结果 
}

int main()
{
    gets(c);
    printf("%d",st(c));
    return 0;
}

 

 

 

 

 

 

 

End.

posted @ 2017-05-25 16:22  夜雨声不烦  阅读(190)  评论(0编辑  收藏  举报