建议不会的看别人的代码自己在之上模拟一遍,仅仅要耐心模拟就会做出来

题目链接: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题目链接的更多相关文章

  1. 数据结构--栈的应用(表达式求值 nyoj 35)

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

  2. C++表达式求值(利用数据结构栈)

    唉,刚刚用C++又又一次写了一个较完好的表达式求值程序,最后精简后程序还不到100行.这不经让我 想到了大一上学期刚学c语言时自己费了好大的劲,写了几百行并且功能还不是非常齐全(当时还不能计算有括号的 ...

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

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

  4. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  5. nyist0j 35 表达式求值

    题目链接:表达式求值 该题以前做过但是WA了,今天终于把他解决了,各种悲剧啊,又是考虑不周到啊................... 所以贴出来纪念一下,并作为一个警示 /**** ps:注意当遇到 ...

  6. 表达式求值--数据结构C语言算法实现

    这篇博客介绍的表达式求值是用C语言实现的,只使用了c++里面的引用. 数据结构课本上的一个例题,但是看起来很简单,实现却遇到了很多问题. 这个题需要构建两个栈,一个用来存储运算符OPTR, 一个用来存 ...

  7. 数据结构课程设计四则运算表达式求值(C语言版)

    本系统为四则运算表达式求值系统,用于带小括号的一定范围内正负数的四则运算标准(中缀)表达式的求值.注意事项:    1.请保证输入的四则表达式的合法性.输入的中缀表达式中只能含有英文符号"+ ...

  8. C语言中缀表达式求值(综合)

    题前需要了解的:中缀.后缀表达式是什么?(不知道你们知不知道,反正我当时不知道,搜的百度) 基本思路:先把输入的中缀表达式→后缀表达式→进行计算得出结果 栈:"先进先出,先进后出" ...

  9. 用Python3实现表达式求值

    一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...

随机推荐

  1. debug环境下打印

    #ifdef DEBUG #    define NSLog(...) NSLog(__VA_ARGS__) #else #    define NSLog(...) {} #endif

  2. hibernate源码分析1-保存一个对象

    要点 用了event的方式贯穿CRUD的过程 值得学习 用dynamic-insert 支持 插入时 可选 全字段插入 还是仅仅有值的字段插入. 返回主键的值 用了 Serializable 类型作为 ...

  3. 使mysql的表内容可以输入中文内容

    修改数据库的字符集mysql>use mydb mysql>alter database mydb character set utf8;

  4. Spring @注解详解(转)

    1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...

  5. 【bzoj1002】[FJOI2007]轮状病毒 矩阵树定理+高精度

    题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...

  6. 【Luogu】P2709小B的询问(莫队算法)

    题目链接 md,1A率等于0. 烦死. 终于搞到一道莫队了qwq. 先对区间分块再按照块编号为第一关键字,右端点为第二关键字排序,然后每次端点移动1乱搞. 然后……就wa了. 然后有很多细节需要注意q ...

  7. Linux内核之网络

    应用层: 套接字将Unix一切都是内核的概念应用到网络连接中,内核跟用户空间套接字之间的接口实现在c的标准库中,使用了socketcall系统调用. socketcall充当了一个多路分解器,将各种任 ...

  8. hdu 5019(第K大公约数)

    Revenge of GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. 使用Python计算研究生学分绩(绩点)

    最近看了CSDN上一个专栏<Python爬虫入门教程>,其中最后一篇作者写了个例子,用爬虫计算山东大学绩点,顿时想到前一阵子搞测评的时候还得拿计算器一点点算自己的平均学分绩,也想写一个自己 ...

  10. AC日记——Weird Rounding Codeforces 779b

    B. Weird Rounding time limit per test 1 second memory limit per test 256 megabytes input standard in ...