Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >表达式求值(1)

表达式求值(1)

作者头像
书童小二
发布于 2018-09-03 10:35:49
发布于 2018-09-03 10:35:49
65100
代码可运行
举报
文章被收录于专栏:前端儿前端儿
运行总次数:0
代码可运行

表达式求值

描述

Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等。经过训练,Dr.Kong设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。

假设表达式可以简单定义为:

1. 一个正的十进制数 x 是一个表达式。

2. 如果 x 和 y 是 表达式,则 函数min(x,y )也是表达式,其值为x,y 中的最小数。

3. 如果 x 和 y 是 表达式,则 函数max(x,y )也是表达式,其值为x,y 中的最大数。

4.如果 x 和 y 是 表达式,则 函数add(x,y )也是表达式,其值为x,y 之和。

例如, 表达式 max(add(1,2),7) 的值为 7。

请你编写程序,对于给定的一组表达式,帮助 Dr.Kong 算出正确答案,以便校对卡多计算的正误。

输入第一行: N 表示要计算的表达式个数 (1≤ N ≤ 10)  接下来有N行, 每行是一个字符串,表示待求值的表达式 (表达式中不会有多余的空格,每行不超过300个字符,表达式中出现的十进制数都不 超过1000。)输出输出有N行,每一行对应一个表达式的值。样例输入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3
add(1,2) 
max(1,999) 
add(min(1,1000),add(100,99)) 

样例输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3
999
200
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stack>

using namespace std;
stack <int> s;

double add(int m, int n)
{
return m + n;
}
double max(int m, int n)
{
return m >= n ? m : n; 
} 
double min(int m, int n)
{
return m >= n ? n : m;
}
void reverse(char a[])
{
char b[400];
int i;
memset(b, '\0', sizeof(b));
strcpy(b, a);

for(i = 0; i < strlen(a); i++) 
a[i] = b[strlen(b)-i-1];
} 
int main()

{
int n, i, j = 0,K;
int p, q;
char str[400],a[400], b[400];


scanf("%d", &n);
getchar();

while (n--) {
gets(str);
memset(a, '\0', sizeof(a));
if(str[strlen(str) - 1] != ')') { 
printf("%s\n", str);
continue;
}
for(i = strlen(str) - 1; i >= 3; i--) {    
if(str[i] == ')') continue;
if(str[i] !=',' && str[i] != '(') a[j++] = str[i];
if(str[i-1] == ',' || str[i-1] == '(') {
reverse(a);
q = atof(a);
j = 0;
memset(a, '\0', sizeof(a));
s.push(q);
}
if(str[i] == '(') {
p = s.top();    s.pop();
q = s.top();    s.pop();
switch(str[i-1]) {
case 'd': s.push(add(p, q)); i = i - 3; continue;
case 'n': s.push(min(p, q)); i = i - 3; continue;
case 'x': s.push(max(p, q)); i = i - 3; continue;
}
}
}
printf("%d\n", s.top());
}
return 0;
}        
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
表达式求值
ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧。 比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)
书童小二
2018/09/03
4820
NYOJ-------表达式求值
时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等。经过训练,Dr.Kong设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。 假设表达式可以简单定义为: 1.一个正的十进制数x是一个表达式。 2.如果x和y是表达式,则 函数min(x,y)也是表达式,其值为x,y 中的最小数。 3.如果x和y是表达式,则
Gxjun
2018/03/21
7070
表达式求值(中缀转后缀及后缀表达式求值)
因为比较懒,而刚好在网上看到画的还不错的图,所以就直接贴过来了哦。希望作者不要怪罪哦。。。 遇到a,直接输出:
全栈程序员站长
2022/09/10
7560
表达式求值(中缀转后缀及后缀表达式求值)
表达式求值问题
   最近在学习表达式求值问题,想使用C++或C语言实现一个带圆括号的十进制正整数的表达式求值控制台程序。这个问题可以通过栈或者二叉树遍历来解决。记得以前在学校学习数据结构中栈的应用时看到过,另外编译原理这门课也有讲过。重新翻开<<数据结构-C语言描述 耿国华 主编>>一书的P80~P83第3张有关栈相应的章节时,有一个无括号算术表达式的求值问题,其次在对应的光盘上课程设计里头有表达式求值的相关描述,这里记录如下:
ccf19881030
2019/04/24
1.3K0
刷题日常(数据流中的中位数,逆波兰表达式求值,最长连续序列,字母异位词分组)
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。
用户11369558
2024/12/24
450
刷题日常(数据流中的中位数,逆波兰表达式求值,最长连续序列,字母异位词分组)
利用栈转换中缀表达式到后缀表达式
本篇是栈篇的最后一篇,记录一下如何用栈实现中缀表达式转后缀表达式。 先举例一个后缀表达式9 3 1 - 2 * + 5 2 / + 他的中缀表达式是9+(3-1)*2+5/2 首先我们要找到这个表达式的优先级优先级最高的是括号 其次是乘法和除法再然后是加法 那么如何用栈来演示呢。 之前那个表达式很长难以理解,我们用A+(B*C)很明显B*\C的优先级高,所以把*置后 然后 A的操作数就变成了BC*
用户7272142
2023/10/11
2280
利用栈转换中缀表达式到后缀表达式
利用栈计算后缀表达式
上篇笔记我们已经知道了后缀表达式以及他的计算方法,本篇我会用代码实现利用栈计算后缀表达式。
用户7272142
2023/10/11
1850
利用栈计算后缀表达式
借助栈来实现单链表的逆置运算_中缀后缀表达式互相转换
原题链接 算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
全栈程序员站长
2022/09/21
3360
数据结构(8)栈的应用——求值表达式
今天来写一下栈在求值表达式里的应用,这部分看了差不多一天了,具体原理基本懂了,代码实现部分只实现了无括号情况下的中缀表达式转后缀表达式,因为没找到标准的C代码实现,所以一直自己摸索,今天就来写一写原理以及已经实现的代码。
mumumu
2022/12/26
3620
数据结构(8)栈的应用——求值表达式
C++栈和队列
将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题,很容易通过”除B取余法”来解决。
谙忆
2021/01/19
5960
BZOJ 1179: [Apio2009]Atm(tarjan+SPFA)
Description Siruseri 城中的道路都是单向的。不同的道路由路口连接。按照法律的规定, 在每个路口都设立了一个 Siruser i 银行的 ATM 取款机。令人奇怪的是,Siruseri 的酒吧也都设在路口,虽然并不是每个路口都设有酒吧。Bandit ji 计划实施 Siruseri 有史以来最惊天动地的 ATM 抢劫。他将从市中心 出发,沿着单向道路行驶,抢劫所有他 途径的 ATM 机,最终他将在一个酒吧庆 祝他的胜利。使用高超的黑客技术,他获知了每个 ATM 机中可以掠取的 现金数额。他
attack
2018/04/10
7410
BZOJ 1179: [Apio2009]Atm(tarjan+SPFA)
2020 年 “联想杯”全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛(部分题解+AC代码)
大法师有n点初始魔法,每秒可以召唤一个水元素,消耗x点魔法(现有魔法不足则不能召唤),无论是否召唤,这一秒结束的时候会回复y点魔法,问m秒可以召唤多少水元素。
Here_SDUT
2022/06/29
2400
C++11新特性探索:Lambda表达式与函数包装器的实用指南
C++11 的发布为现代 C++ 带来了许多革命性的特性,其中 Lambda 表达式和函数包装器是提升代码简洁性和灵活性的代表性工具。Lambda 表达式让开发者能够像函数一样轻松地创建匿名函数,而函数包装器则为灵活地管理和调用可调用对象提供了一个强大的抽象。在这篇文章中,我们将详细探讨 Lambda 表达式和函数包装器的概念、用法以及它们如何在实际项目中提升代码的可读性和效率。
suye
2024/11/26
1510
【栈】实现表达式求值(C++)(详解)
【栈】实现表达式求值 思路 && 理解 && 注意 给定一串表达式,字符串类型,依次遍历从头开始遍历每一个位置的内容。 第一个数字,第一个运算符先直接往栈里面push(两个不同的栈) 接着走,遇到数push进来,接着走,遇到运算符,和前面那个已经push进栈的运算符进行优先级比较,如果当前运算符优先级大,那就接着push进来,反之,pop出栈,运算前面的式子之和(之后判断运算符栈中是否还有内容,并且当前运算符的优先级是否小于等于已有的运算符,小于等于就接着运算前面的表达式,完成push当前运算符,反之
半生瓜的blog
2023/05/13
3640
“栈”的典型应用—表达式求值(C语言实现)
表达式求值是程序设计语言编译中的一个基本问题。它的实现就是对“栈”的典型应用。本文针对表达式求值使用的是最简单直观的算法“算符优先法”。
全栈程序员站长
2022/07/02
9960
C++大作业 题目一、二
【编程提示】 假设 a[max]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; i=5;k=5; 输出结果为: 原顺序表:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 删除结点后:1,2,3,4,10,11,12,13,14,15
HandSomeHe_In_Fzu
2022/11/21
4840
2017.11.7解题报告
预计分数:100+0+40=140 实际分数:100+0+0=100 震惊!出题人的一张机票可以用无限次 T1https://www.luogu.org/problem/show?pid=T16500
attack
2018/04/11
6180
2017.11.7解题报告
逆波兰法表示的表达式_波兰表达式和逆波兰
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
全栈程序员站长
2022/09/22
6120
数据结构:表达式求值
表达式求值是程序设计语言编译的一个最基本问题,其中任何一个表达式都是由操作数、运算符(±*/)、界限符(#,(,),[,] )组成。运算符和界限符统称算符。算符的优先级关系为(数学角度上):
全栈程序员站长
2022/07/02
2310
数据结构:表达式求值
中缀表达式转后缀表达式栈的变化_利用栈实现中缀转后缀
1. 数字直接加入后缀表达式 2.如果是‘(’, 入栈 3.如果是‘)’, 则依次把栈中的运算符加入后缀表达式,直到出现‘(’并从栈中删除它 4. 如果是运算符 + – * / a.栈空或者栈顶元素为‘(’, 入栈 b.高于栈顶元素优先级,入栈 c.否则依次弹出栈顶运算符,直到遇到一个优先级小于它的运算符或者是遇到‘(’为止 5.遍历完成后,如果栈非空则依次弹出所有栈顶元素加入到表达式当中
全栈程序员站长
2022/11/15
4850
中缀表达式转后缀表达式栈的变化_利用栈实现中缀转后缀
推荐阅读
相关推荐
表达式求值
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验