问题标题: 酷町堂:1768 运算符前置表达式

0
0

0
已采纳
陶旭杰
陶旭杰
中级光能
中级光能

作为一个热爱作死的蒟蒻,我来回答问题啦QWQ

对于运算符前置表达式,我们可以从后往前遍历。建立一个栈s,如果第i个元素是一个数则入栈;否则即为运算符,取出栈顶的两个元素并弹出,进行该运算符的运算并将结果放入栈中。

当遍历结束时,栈中只剩下一个元素,那么这个元素就是结果。

好了好了,说人话~~

样例:

* + 11.0 12.0 + 24.0 35.0

从后往前遍历:

(1) 35.0为一个数,入栈。s栈:35.0

(2) 24.0为一个数,入栈。s栈:24.0 35.0

(3) +为一个运算符,取出堆顶的两个元素,即24.0和35.0。随后弹出24.0和35.0,将24.0+35.0的结果存入栈中。s栈:59.0

(4) 12.0为一个数,入栈。s栈:12.0 59.0

(4) 11.0为一个数,入栈。s栈:11.0 12.0 59.0

(5) +为一个运算符,同(3),取出11.0和12.0并弹出,将11.0+12.0的结果23.0存入栈中。s栈:23.0 59.0

(6) *为一个运算符,同(5),取出23.0和59.0并弹出,将23.0*59.0的结果1357.0存入栈中。s栈:1357.0

循环结束,栈内仅有一个元素,保留一位小数输出。

输出结果:1357.0

贴出核心代码:

核心代码

什么?你在问我stringstream是啥?就是那啥,嗯,我们老师说的。

string s;(把s看做一个有数字也有字符的字符串)

stringstream ss;

ss<<s;(我把这个叫做吸星大法)

int x;

ss>>x(吐出来一个数字)

char c;

ss>>c;(吐出来一个字符)

如果s是:"385*857+666",那么第一次ss>>x吐出来的就是385,第二次ss>>c吐出来的是*,第三次ss>>x吐出来的又变成了857……

以此类推。。。

我也讲不清楚,有兴趣的话可以点击这里

看我写得这么长,采纳一下呗,谢谢!

0
李瑞曦
李瑞曦
高级天翼
高级天翼

嘤嘤嘤~本弱鸡也觉得很难,非常难,特别难,超级难!

😭😭😭

0
0
0
缪鲲鹏
缪鲲鹏
新手光能
新手光能

真的简单 就这就这就这 不会真的有人连这么简单的题都要问吧!

缪鲲鹏在2020-07-21 21:35:19追加了内容

开个玩笑而已 别误会了巨佬

缪鲲鹏在2020-07-21 21:35:46追加了内容

忘记加狗头了(doge)嘿嘿嘿

0
我要回答