1005. 后缀表达式计算

1005. 后缀表达式计算
 
 
Total:316 Accepted:85
 
     
     
 
Time Limit: 1sec    Memory Limit:256MB
Description

来自USA的Mr.Allison是某班的英语老师,学期开始之前他要求自己班的同学阅读一本英文小说,并写一份50000字的读书报告。该班的同学很苦恼,并想方设法让Mr.Allison放弃读书笔记这个念头,于是该班的大牛PYY想到一个借口:看那么多份读书笔记会花费很多时间的!把这个理由告诉Mr.Allison之后,Mr.Allison也觉得挺有道理,但一共要阅读多少文字呢?于是PYY就给出一条后缀表达式,并告诉Mr.Allison说,这条表达式的结果就是您要阅读的文字。Mr.Allison的数学不咋地,于是就找你来帮他计算这条后缀表达式的值。

Input

 第一行是一整数,即测试样例个数T.

以下T行,每一行是一个长度不超过100的字符串,代表一条后缀表达式。表达式中只含有+、-、*、/四种运算符和26个小写英文字母,不含其它字符。每一个英文字母代表一个正整数:
a = 1,b = 2,c = 3...y = 25,z = 26。
 
Output

 每一个输入样例,单独一行输出结果:后缀表达式的值,一个正实数S,保留两位小数。

 
Sample Input
 Copy sample input to clipboard
2
ab+c*
int**py++
Sample Output
9.00
2561.00






#include<iostream>
#include<iomanip>
#include<string>
#include<stack>
#include<cmath>

using namespace std;

int main() {
    int n;
    cin>> n;
    for (int i= 0; i< n; i++) {
    stack<double> s;
    string str;
    cin>> str;
    for (int i= 0; i< str.size(); i++) {
        if (str[i]>= 'a'&& str[i]<= 'z') {
            double temp;
            temp= str[i]- 96;
            s.push(temp);
        } else {
            double temp;
            double a1, a2;
            a2= s.top();
            s.pop();
            a1= s.top();
            s.pop();
            if (str[i]== '+') {
                temp= a1+ a2;
            } else if (str[i]== '-') {
                temp= a1- a2;
            } else if (str[i]== '*') {
                temp= a1* a2;
            } else if (str[i]== '/') {
                temp= a1/ a2;
            }
            s.push(temp);
        }
    }
    double a = s.top();
    a =floor(a*100.0)/100.0;
    cout.precision(2);        //输出小数点后两位
    cout<<setiosflags(ios::fixed)<<setw(2)<<a<<endl;
}
}


运用后缀表达式进行计算的具体做法:(From 百度百科)
建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值