NYOJ--128--前缀式计算(表达式求值)
前缀式计算
- 描述
-
先说明一下什么是中缀式:
如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
知识点:
stringstream可以把string转换成double,int,long long等
unget()可以把读出的字符放回字符串流中
atof在stdlib.h中的把str字符串转换成double
atoi在stdlib.h中的把str字符串转换成int;
/*
Name: NYOJ--128--前缀式计算
Copyright:
Author: 日天大帝
Date: 01/05/17 18:09
Description: 学C++这么久了,还是只会C的部分,看了别人代码,惭愧了
*/
#include<iostream>
#include<iomanip>
#include<string>
#include<sstream>
using namespace std;
stringstream ss;
double ans;
double f(){
char ch;
ss>>ch;
if(ch == '+')return f()+f();
else if(ch == '-')return f()-f();
else if(ch == '*')return f()*f();
else if(ch == '/')return f()/f();
ss.unget();
ss>>ans;
return ans;
}
int main(){
ios::sync_with_stdio(false);
string str;
while(getline(cin,str)){
ss.clear();
ss<<str;
cout<<setiosflags(ios::fixed)
<<setprecision()
<<f()<<endl;
}
;
}
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int pos;string str;
double fun()
{
++pos;
if(str[pos]==' ')++pos;
')
{
string s;
while(pos!=str.size()&&str[pos]!=' ')
s+=str[pos++];
double tp;
sscanf(s.c_str(),"%lf",&tp);
return tp;
}
if(str[pos]=='+')
return fun()+fun();
if(str[pos]=='-')
return fun()-fun();
if(str[pos]=='*')
return fun()*fun();
if(str[pos]=='/')
return fun()/fun();
}
int main()
{
while(getline(cin,str))
{
pos=-;
printf("%.2lf\n",fun());
}
}
#include<iostream>
#include<string>
#include<stdio.h>
#include<sstream>
#include<stdlib.h>
using namespace std;
stringstream ss;//字符串流
double fun()
{
char ch;
double tp;
ss>>ch;
if(ch=='+')
return fun()+fun();
if(ch=='-')
return fun()-fun();
if(ch=='*')
return fun()*fun();
if(ch=='/')
return fun()/fun();
ss.unget();//把读出的ch字符放回ss字符串流中
ss>>tp; //从字符串流中读出double型数
return tp;
}
int main()
{
string str;
while(getline(cin,str))
{
ss.clear();
ss<<str;
printf("%.2lf\n",fun());
}
}
#include<iostream>
#include<string>
#include<stdio.h>
#include<sstream>
#include<stdlib.h>
using namespace std;
stringstream ss;//字符串流
double fun()
{
string str;
ss>>str;
]=='+')
return fun()+fun();
]=='-')
return fun()-fun();
]=='*')
return fun()*fun();
]=='/')
return fun()/fun();
return atof(str.c_str());//atof在stdlib.h中 把str字符串转换成double;
//atoi在stdlib.h中 把str字符串转换成int;
}
int main()
{
string str;
while(getline(cin,str))
{
ss.clear();
ss<<str;
printf("%.2lf\n",fun());
}
}
#include<stdio.h>
#include<stdlib.h>
];
double fun()
{
if(scanf("%s",str)==EOF)
<<;
]=='+')
return fun()+fun();
]=='-')
return fun()-fun();
]=='*')
return fun()*fun();
]=='/')
return fun()/fun();
return atof(str);//atof在stdlib.h中的把str字符串转换成double;
//atoi在stdlib.h中的把str字符串转换成int;
}
int main()
{
)
{
double tp=fun();
<<)
printf("%.2lf\n",tp);
else
break;
}
}
NYOJ--128--前缀式计算(表达式求值)的更多相关文章
- NYOJ 128 前缀式计算
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...
- [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)
Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...
- NYOJ 35 表达式求值(逆波兰式求值)
http://acm.nyist.net/JudgeOnline/problemset.php?typeid=4 NYOJ 35 表达式求值(逆波兰式求值) 逆波兰式式也称后缀表达式. 一般的表达式求 ...
- NYOJ 128 前缀表达式的计算
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...
- NYOJ 1272 表达式求值 第九届省赛 (字符串处理)
title: 表达式求值 第九届省赛 nyoj 1272 tags: [栈,数据结构] 题目链接 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表 ...
- 数据结构--栈的应用(表达式求值 nyoj 35)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35 题目: 表达式求值 时间限制:3000 ms | 内存限制:65535 KB描述 AC ...
- nyoj 305 表达式求值 (递归)
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...
- OpenJudge计算概论-简单算术表达式求值
/*===================================== 简单算术表达式求值 总时间限制: 1000ms 内存限制: 65536kB 描述 2位正整数的简单算术运算(只考虑整数运 ...
- SDIBT2666——逆波兰表达式求值
逆波兰表达式求值(栈和队列) Description 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序.规定:逆波兰表达式的长度不超过一行,以@符作为输入结束,操作数之间用空格分隔,操作符只可能有+ ...
随机推荐
- Swift数组的迭代访问
你可以通过for-in循环来迭代访问整个数组的值. for item in shoppingList { println(item) } // Six eggs // Milk // Flour // ...
- 利用MUI滑动进行利息计算(移动端APP显示)
在开发移动端的应用时,会用到很多的手势操作,比如滑动.长按等,为了方便开放者快速集成这些手势,mui内置了常用的手势事件,其中滑动应用是比较常见的应用操作,本篇文章将讲述如何利用滑动改变对应值进行计算 ...
- Linux 内核综述
一.什么是Linux内核: 内核->操作系统中最重要的部分,内核将在系统引导时被装载进RAM,其中包含了很多关键的例程,以操作系统.内核是OS最为关键的部分,人们常将OS(操作系统)与内核等同. ...
- 构建自己的Tomcat镜像
在很多情况下,我们会不满足于官方提供的Tomcat镜像.比如官方镜像的时区为UTC时间,并不是北京时间:再比如在特定硬件环境下,jdk的随机数生成器初始化过慢问题.此时,我们就会考虑构建自己的Tomc ...
- Sublime Text 关闭自动更新的办法
解决关于Submit Text每次打开 都会跳出更新选项的问题 Windows 下: 打开 Preferences —— Settings—User { "color_scheme" ...
- Spring Security @PreAuthorize 拦截无效
1. 在使用spring security的时候使用注解,@PreAuthorize("hasAnyRole('ROLE_Admin')") 放在对方法的访问权限进行控制失效,其中 ...
- Win10系统下安装Oracle服务器和Oracle客户端
工作电脑从Win7换为Win10,在给Win10系统安装Oracle时花费了很长世间终于搞定,在此给大家分享下. 1.工作中需要连接测试环境.生产环境Oracle,所以安装了公司封装的Oracle客户 ...
- 真实记录我入门学习Linux系统的经历
我本身来说并不是计算机专业的学生,因此今天来谈及这个话题,对大家来说,有了更多的客观公正性.对我而言,linux给我最大的财富,并不是编程能力提高了多少,而是视野的开阔.心态的转变和自学能力的提高.我 ...
- VUE 分页组件
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing
java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...