博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ 128 前缀式计算
阅读量:4982 次
发布时间:2019-06-12

本文共 1323 字,大约阅读时间需要 4 分钟。

题目链接:

简单说下思路:从字符串最右端开始扫描,遇到数字则入栈,遇到运算符则弹出两个元素计算后再入栈,知道最后栈中最后一个元素就是最后表达式的值。

字符串的处理比较繁琐。充分利用库函数 。

 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;int main(){ stack
s; string ex; while(getline(cin,ex)) { char tmp; while(!s.empty())s.pop(); for(int i=ex.size()-1;i>0;i--) { tmp=ex[i]; if(tmp==' ')continue; if(ex[i-1]==' '){ tmp-='0'; if(tmp>0&&tmp<10) s.push(double(tmp)); else { tmp+='0'; double a=s.top(); s.pop(); double b=s.top(); s.pop(); double re; switch(tmp){ case '+':re=a+b;s.push(re);break; case '-':re=a-b;s.push(re);break; case '*':re=a*b;s.push(re);break; case '/':re=a/b;s.push(re);break; } } } else { string dot(""); int cnt=0; dot+=tmp; int j=i-1; while(j>=0&&ex[j]!=' '){ dot+=ex[j]; j--; } string dot1(dot.size(),' '); for(int i=dot.size()-1,j=0;i>=0;i--,j++)dot1[j]=dot[i]; char pt[20]; strcpy(pt,dot1.c_str()); double re=atof(pt); s.push(re); i=j; } } tmp=ex[0]; double a=s.top(); s.pop(); double b=s.top(); s.pop(); switch(tmp){ case '+':printf("%.2lf\n",a+b);break; case '-':printf("%.2lf\n",a-b);break; case '*':printf("%.2lf\n",a*b);break; case '/':printf("%.2lf\n",a/b);break; } } return 0;}

 

 

转载于:https://www.cnblogs.com/jiangu66/p/3187021.html

你可能感兴趣的文章
HTML语义化初探
查看>>
Peaceful Commission 2-sat
查看>>
bzoj3810: [Coci2015]Stanovi(记忆化搜索)
查看>>
azkaban调度
查看>>
11、增强型for循环对二维数组的输出(test8.java)
查看>>
模拟百度搜索“2012世界末日”网页地震撕裂效果
查看>>
数据库锁表的分析与解决
查看>>
.NET跨平台之旅:在Linux上将ASP.NET 5运行日志写入文件
查看>>
[故障公告]14:39-15:39博客站点部分负载均衡遭遇3次20G以上的流量攻击
查看>>
面向中文的自然语言编程
查看>>
Flutter工程目录
查看>>
hive 函数 current_date()
查看>>
使用python+selenium对12306车票数据读取
查看>>
服务器Config文件不能查看的问题
查看>>
UIImage与CCSprite互相转换
查看>>
jsp详解
查看>>
大型网站架构图
查看>>
gradle入门(1-6)将Java项目从maven迁移到gradle
查看>>
新概念英语(1-133)Sensational news!
查看>>
Magnifier笔记
查看>>