南阳 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 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...
随机推荐
- 01_Java 软、弱引用语法介绍
文章导读: 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用, 本章内容介绍了Reference的概 ...
- python - 接口自动化测试 - contants - 常量封装
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: contants.py @ide: PyCharm Com ...
- 使mysql的表内容可以输入中文内容
修改数据库的字符集mysql>use mydb mysql>alter database mydb character set utf8;
- GCC内嵌汇编一些限制字符串
/******************/ “b”将输入变量放入ebx “c”将输入变量放入ecx “d”将输入变量放入edx “s”将输入变量放入esi “d”将输入变量放入edi “q”将输入变量放 ...
- 01 Java 代码是怎么运行的
Java代码运行的方式 1:在开发工具中运行 2:双击 jar 文件运行 3:在命令行中运行 4:在网页中运行 上述运行方式都离不开 JRE,也就是 Java 运行时环境.实际上 JRE 仅包含运行 ...
- Spring中的注解 @Qualifier
在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean ...
- struts拦截器的使用
拦截器的使用 转自http://blog.csdn.net/woshisap/article/details/7271854 1:拦截器(Interceptor) 拦截器是Struts2最强大的特性之 ...
- Codeforces Round #345 (Div. 2)——B. Beautiful Paintings(贪心求上升序列个数)
B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...
- 算法复习——状压dp
状压dp的核心在于,当我们不能通过表现单一的对象的状态来达到dp的最优子结构和无后效性原则时,我们可能保存多个元素的有关信息··这时候利用2进制的01来表示每个元素相关状态并将其压缩成2进制数就可以达 ...
- Java面试题之继承、组合、聚合有什么区别
继承:他是is-a的关系,指一个类继承另外一个类的功能 例如:public class A extends B { } 聚合:他是has-a 例如:public class A{ List<B& ...