南阳 oj 表达式求值 题目35 数据结构 NYO题目链接
建议不会的看别人的代码自己在之上模拟一遍,仅仅要耐心模拟就会做出来
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?
pid=35
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1000
using namespace std;
char s[N];//存储字符串
char str1[N];//存储'o'-到'9'的字符
char str2[N];//存储运算符
int top1,top2;//利用数组模拟栈
int compare(char x)//优先级比較
{
switch(x)
{
case '+' :
case '-' :return 1;
case '*' :
case '/' :return 2;
case '(' :return 0;
default: return -1;
}
}
void zhuan()//转换
{
int k;
top1=-1,top2=-1;//初始化头
scanf("%s",s);
k=strlen(s);
for(int i=0;i<k;i++)
{
if(s[i]>='0'&&s[i]<='9'||s[i]=='.')//假设是数字进去str1数组中
{
top1++;
str1[top1]=s[i];
}
else if(s[i]=='(')//假设是'('进入str2中
{
top2++;
str2[top2]=s[i];
}
else if(s[i]==')')//假设是')'说明str2中有运算符
{
while(str2[top2]!='(')
{
top1++;
str1[top1]=' ';
top1++;
str1[top1]=str2[top2];
top2--;
}
top2--;//把'('出去
}
else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')//假设是运算符比較优先级
{
top1++;
str1[top1]=' ';
while(compare(s[i])<=compare(str2[top2]))//假设s[i]优先级低于之前也就是str2中的运算符 把str2中的运算符给str1
{
top1++;
str1[top1]=str2[top2];
top1++;
str1[top1]=' ';
top2--;
}
top2++;
str2[top2]=s[i];//假设str2高进入str2
}
}
while(top2!=-1)//将剩余的进入str1中
{
top1++;
str1[top1]=' ';
top1++;
str1[top1]=str2[top2];
top2--;
}
top1++;
str1[top1]=' ';
top1++;
str1[top1]='=';
top1++;
str1[top1]='\0';
}
void sum()//计算
{
double a1,a2,d[N];
char ch;
char s1[100],st[N];
int k,t=-1;
for(int i=0;i<top1;i++)
{
k=0;
ch=str1[i];
while(str1[i]!=' ')
{
if(str1[i]=='=') break;
s1[k++]=str1[i];
i++;
}
if(ch>='0'&&ch<='9')
{
s1[k]='\0';
t++;
d[t]=atof(s1);
}
else
{
switch(ch)
{
case '+' :
a2=d[t];
t--;
a1=d[t];
t--;
t++;
d[t]=a1+a2;
break;
case '-' :
a2=d[t];
t--;
a1=d[t];
t--;
t++;
d[t]=a1-a2;
break;
case '*' :
a2=d[t];
t--;
a1=d[t];
t--;
t++;
d[t]=a1*a2;
break;
case '/' :
a2=d[t];
t--;
a1=d[t];
t--;
t++;
d[t]=a1/a2;
break;
default : break;
}
}
}
printf("%.2lf\n",d[t]);
}
main()
{
int n;
scanf("%d",&n);
while(n--)
{
zhuan();
sum();
}
}
南阳 oj 表达式求值 题目35 数据结构 NYO题目链接的更多相关文章
- 数据结构--栈的应用(表达式求值 nyoj 35)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35 题目: 表达式求值 时间限制:3000 ms | 内存限制:65535 KB描述 AC ...
- C++表达式求值(利用数据结构栈)
唉,刚刚用C++又又一次写了一个较完好的表达式求值程序,最后精简后程序还不到100行.这不经让我 想到了大一上学期刚学c语言时自己费了好大的劲,写了几百行并且功能还不是非常齐全(当时还不能计算有括号的 ...
- NYOJ 35 表达式求值(逆波兰式求值)
http://acm.nyist.net/JudgeOnline/problemset.php?typeid=4 NYOJ 35 表达式求值(逆波兰式求值) 逆波兰式式也称后缀表达式. 一般的表达式求 ...
- 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值
一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...
- nyist0j 35 表达式求值
题目链接:表达式求值 该题以前做过但是WA了,今天终于把他解决了,各种悲剧啊,又是考虑不周到啊................... 所以贴出来纪念一下,并作为一个警示 /**** ps:注意当遇到 ...
- 表达式求值--数据结构C语言算法实现
这篇博客介绍的表达式求值是用C语言实现的,只使用了c++里面的引用. 数据结构课本上的一个例题,但是看起来很简单,实现却遇到了很多问题. 这个题需要构建两个栈,一个用来存储运算符OPTR, 一个用来存 ...
- 数据结构课程设计四则运算表达式求值(C语言版)
本系统为四则运算表达式求值系统,用于带小括号的一定范围内正负数的四则运算标准(中缀)表达式的求值.注意事项: 1.请保证输入的四则表达式的合法性.输入的中缀表达式中只能含有英文符号"+ ...
- C语言中缀表达式求值(综合)
题前需要了解的:中缀.后缀表达式是什么?(不知道你们知不知道,反正我当时不知道,搜的百度) 基本思路:先把输入的中缀表达式→后缀表达式→进行计算得出结果 栈:"先进先出,先进后出" ...
- 用Python3实现表达式求值
一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...
随机推荐
- install chrome on ubuntu14.04
summary chrome broswer can't found in ubuntu14.04 default source list.To install chrome ,you must ad ...
- 2018 “百度之星”程序设计大赛 - 初赛(B)
degree Accepts: 1581 Submissions: 3494 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 1310 ...
- Convolutional Networks for Image Semantic Segmentation
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52857657 把前段时间自己整理的一个 ...
- Xshell设置登录会话
新建会话 点击用户登录验证输入账号密码 如果是公钥登录,选择pubulic key登录
- [Err] 1022 - Can't write; duplicate key in table '#sql-1500_26'
今天用powerdesigner修改了一些外键关系,有两个外键的名字取一样的,忘记改了.然后在用navicat运行sql文件时,报出[Err] 1022 - Can't write; dupl ...
- [luoguP1963] [NOI2009]变换序列(二分图最大匹配)
传送门 根据公式xjb推一下,然后就可以连边. 考虑到字典序最小,和匈牙利算法的实现过程,要倒序匹配. #include <cmath> #include <cstdio> # ...
- LCT(Link-Cut Tree)
Link-cut tree(LCT)[可以理解为树链剖分+splay] 给出如下定义: access(x):访问x节点 perferred child:若以x为根的子树中最后被访问的节点在以x的儿子y ...
- 开始学习es6(一) 搭建个es6的开发环境
1.开始学习es6 如果想在浏览器跑es6 需要给es6个环境 因为一直用vue-cli全家桶 这样虽然方便 但如果用es6需要跑起个vue全家桶 于是想到可以用gulp搭建个开发环境 首先需要1. ...
- linux之Deamon进程创建及其进程exit,_exit,return之间的区别
Dameon进程又被称做守护进程,一般来说他有以下2个特点: 1.生命周期非常长,一旦启动,一般不会终止,直到系统推出,不过dameon进程可以通过stop或者发送信号将其杀死 2.在后台执行,不跟任 ...
- IPC 通信接口函数的名字
IPC三种通信机制是指:信号量.共享内存.消息队列 ,管道和命名管道,socket套接字 信号量:通过操作系统中的PV操作来实现: 共享内存:申请一块内存,进程A往共享内存中写,其他的进程就 ...