NYOJ--128--前缀式计算(表达式求值)

时间:2022-12-27 14:51:16

前缀式计算

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

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

如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--前缀式计算(表达式求值)的更多相关文章

  1. NYOJ 128 前缀式计算

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...

  2. &lbrack;Java&rsqb;算术表达式求值之二(中序表达式转后序表达式方案,支持小数)

    Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...

  3. NYOJ 35 表达式求值(逆波兰式求值)

    http://acm.nyist.net/JudgeOnline/problemset.php?typeid=4 NYOJ 35 表达式求值(逆波兰式求值) 逆波兰式式也称后缀表达式. 一般的表达式求 ...

  4. NYOJ 128 前缀表达式的计算

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...

  5. NYOJ 1272 表达式求值 第九届省赛 (字符串处理)

    title: 表达式求值 第九届省赛 nyoj 1272 tags: [栈,数据结构] 题目链接 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表 ...

  6. 数据结构--栈的应用&lpar;表达式求值 nyoj 35&rpar;

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35 题目: 表达式求值 时间限制:3000 ms | 内存限制:65535 KB描述 AC ...

  7. nyoj 305 表达式求值 (递归)

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...

  8. OpenJudge计算概论-简单算术表达式求值

    /*===================================== 简单算术表达式求值 总时间限制: 1000ms 内存限制: 65536kB 描述 2位正整数的简单算术运算(只考虑整数运 ...

  9. SDIBT2666——逆波兰表达式求值

    逆波兰表达式求值(栈和队列) Description 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序.规定:逆波兰表达式的长度不超过一行,以@符作为输入结束,操作数之间用空格分隔,操作符只可能有+ ...

随机推荐

  1. (原创)vim配色------水果色,不伤眼。

  2. 使用VisualVM查看Java Heap Dump

    浏览Heap Dump 可以使用VisualVM浏览heap dump文件的内容,从而快速查看在堆中分配的对象.Heap dumps在主窗口的heap dump子标签页中显示.你可以打开保存在本地的h ...

  3. elasticsearch入门笔记

    安装 注意:elasticsearch需要非ROOT用户启动 https://es.xiaoleilu.com/010_Intro/10_Installing_ES.html 下载elasticsea ...

  4. Spring Boot &plus; Spring Cloud 实现权限管理系统 后端篇(十三):系统备份还原

    系统备份还原 在很多时候,我们需要系统数据进行备份还原.我们这里就使用MySql的备份还原命令实现系统备份还原的功能. 新建工程 新建一个maven项目,并添加相关依赖,可以用Spring boot脚 ...

  5. Ubuntu1&period;6安装Go【小白版】

    [安装golang,并配置环境变量]1.将go下载到Home目录并解压 一键解压会 自动会解压到 Home/go目录. 2.设置环境变量 nano是一种文本编辑器,也可以用其他的编辑器. 输入以下命令 ...

  6. Java使用Rabbitmq惊喜队列queue和消息内容的本地持久化核心方法。(内容存储在硬盘)

    _Channel.queueDeclare(queue, true, false, false, null); _Channel.basicPublish(_ExchangeName, queue,M ...

  7. Js apply方法详解&comma;及其apply&lpar;&rpar;方法的妙用

    Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  8. 【Oracle】ORA-12514&colon; TNS&colon; 监听程序当前无法识别连接描述符中请求的服务

    早上使用PL/SQL连接Oracle的时候,报错如下 解决办法: 找到文件listener.ora,新增以下红色区域,注意:路径需要根据自己的Oracle安装路径自行设置 # listener.ora ...

  9. P1273 有线电视网&lpar;树形dp&rpar;

    P1273 有线电视网 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. ...

  10. Go语言用mock server模拟调用&lpar;httptest&rpar;

    mock是个好东东, 在大项目或大公司,很实用, 因为很多环境不是随时在开发环境可得的. package main import ( "testing" "net/htt ...