前缀式计算

前缀式计算

描述

先说明一下什么是中缀式:

如2+(3+4)*5这种我们最常见的式子就是中缀式。

而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))

然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )

把括号去掉就是:+ 2 * + 3 4 5

最后这个式子就是该表达式的前缀表示。

给你一个前缀表达式,请你计算出该前缀式的值。

比如:

+ 2 * + 3 4 5的值就是 37

输入有多组测试数据,每组测试数据占一行,任意两个操作符之间,任意两个操作数之间,操作数与操作符之间都有一个空格。输入的两个操作数可能是小数,数据保证输入的数都是正数,并且都小于10,操作数数目不超过500。 以EOF为输入结束的标志。输出对每组数据,输出该前缀表达式的值。输出结果保留两位小数。样例输入

+ 2 * + 3 4 5
+ 5.1 / 3 7

样例输出

37.00
5.53
 
#include <iostream>
#include <algorithm>
#include <stack>
#include <string>
#include <iomanip>

using namespace std;

stack<double> val;

int main()
{
    string str;
    while(getline(cin,str))
    {
        string s="";
        for( int i=str.size()-1;i>=0;i--)
        {
            if(str[i]!=' ')
            {
                if(str[i]<='0' && str[i]!='.')
                {
                    double d=val.top();
                    val.pop();
                    switch(str[i])
                    {
                    case '+':
                        d+=val.top();
                        break;
                    case '-':
                        d-=val.top();
                        break;
                    case '*':
                        d*=val.top();
                        break;
                    case '/':
                        d/=val.top();
                        break;
                    }
                    val.pop();
                    val.push(d);
                }
                else
                {
                   s+=str[i];
                }
            }
            else if(!s.empty())
            {
                std::reverse(s.begin(),s.end());
                val.push(atof(s.c_str()));
                s="";
            }
        }
        cout<<fixed<<setprecision(2)<<val.top()<<endl;
    }
    return 0;
}        

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习之tensorflow实战篇

python中list、array、matrix之间的基本区别

python科学计算包的基础是numpy, 里面的array类型经常遇到. 一开始可能把这个array和python内建的列表(list)混淆, 这里简单总结一...

940120
来自专栏python3

python random模块

随机输出一个0~4的数字和range()输出的数字,去比较。猜对了,就是字母,否则是数字

9120
来自专栏数据结构与算法

26:字符串最大跨距

26:字符串最大跨距 总时间限制: 1000ms 内存限制: 65536kB描述 有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过...

46180
来自专栏老秦求学

题目1054:字符串内排序

题目描述: 输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。 输入: 测试数据有多组,输入字符串。 输出: 对于每组输入,输出处理后...

35070
来自专栏数据结构与算法

1696:逆波兰表达式

1696:逆波兰表达式 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的...

38270
来自专栏Jack-Cui

Day3、Python

题目 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1、程序分析     根据题意可知,需要用到字符串的操作方法。本题中要用到的三...

18700
来自专栏WD学习记录

牛客网 数组中的逆序对

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的...

14230
来自专栏数据结构与算法

P1062 数列

题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,...

31270
来自专栏大闲人柴毛毛

动态规划法(三)——最长公共子序列

问题描述 给定两个序列,求出它们的最长公共子序列。 如:序列X={a,b,c,b,d,a,b},Y={b,d,c,a,b,a},则X和Y的最长公共子...

38540
来自专栏武培轩的专栏

Leetcode#1.Two Sum(两数之和)

题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums ...

34870

扫码关注云+社区

领取腾讯云代金券