南阳 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 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...
随机推荐
- eureka显示ip地址的参数
eureka.instance.prefer-ip-address=trueeureka.instance.instance-id=${#spring.cloud.client.ipAddress}: ...
- css图像处理与动画
先讨论几个css 问题 1,css 清除浮动的方法 2,css 居中 3,多行省略号 4,小布局技巧 2D 动画功能属性兼容性:transform.transition.animation trans ...
- 【Luogu】P3205合唱队(区间DP)
题目链接 通过这题我发现我已经不会DP了 区间DP,f[i][j]是从左面转移来的,d[i][j]是从右面转移来的 然后DP方程是 ]) f[i][j]+=f[i+][j]; ][j]; f[i][j ...
- kb-07线段树-03--区间修改查询--lazy思想
/* 区间修改,区间查询和: 第一次使用lazy思想: poj3468 */ #include<iostream> #include<cstdio> #include<c ...
- [解决方案][错误代码:0x80070002]IIS7及以上伪静态报错404
故障现象:DTCMS开启伪静态功能,VS2010预览正常,发布到IIS后报错404.0错误 (WIN7,WIN8,SERVER2008).模块IISWebCore通知MapRequestHandler ...
- 网抓(XML Http Request、VBA)实现
第一种,先看VBA Public Function GetInfo(strMoblie As String) As String '创建对象 Dim xmlHttp As Object Set xml ...
- 重置css样式
如果有第三方插件或者想要覆盖css的样式的话,给他的样式设置auto就好了
- zoj 3790 Consecutive Blocks 离散化+二分
There are N (1 ≤ N ≤ 105) colored blocks (numbered 1 to N from left to right) which are lined up in ...
- “百度杯”CTF比赛 九月场_Test(海洋cms前台getshell)
题目在i春秋ctf训练营 又是一道cms的通用漏洞的题,直接去百度查看通用漏洞 这里我使用的是以下这个漏洞: 海洋CMS V6.28代码执行0day 按照给出的payload,直接访问url+/sea ...
- 27深入理解C指针之---字符串基础
一.字符串:是以ASCII字符NUL结尾的字符序列,NUL表示为\0 1.定义:将字符按顺序存储在数组中,以NUL结尾. 2.特征: 1).每个字符串长度只是包含所有的字符,不包括最后的NUL,手动分 ...