NYOJ 35 表达式求值
表达式求值
- 描述
-
ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧。
比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)- 输入
-
第一行输入一个整数n,共有n组测试数据(n<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
数据保证除数不会为0 - 输出
- 每组都输出该组运算式的运算结果,输出结果保留两位小数。
- 样例输入
-
2 1.000+2/4= ((1+2)*5+1)/4=
- 样例输出
-
1.50 4.00
AC码:
#include<stdio.h>
#include<string.h>
char str[3000];
int t;
double eval()
{double x=0,m;if(str[t]==' ')t--;if(str[t]=='+'){t--;return eval()+eval();}if(str[t]=='-'){t--;return eval()-eval();}if(str[t]=='*'){t--;return eval()*eval();}if(str[t]=='/'){t--;return eval()/eval();}while(str[t]>='0'&&str[t]<='9'){x=x*10+str[t]-'0';t--;}if(str[t]=='.'){t--;m=0.1;while(str[t]>='0'&&str[t]<='9'){x=x+(str[t]-'0')*m;m=m*0.1;t--;}}return x;
}
int main()
{int top,count,T,len,i;char ch[1005],pt[1000];scanf("%d",&T);while(T--){scanf("%s",ch);len=strlen(ch);top=-1;memset(pt,0,sizeof(pt));count=-1;for(i=len-2;i>=0;i--){if(ch[i]>='0'&&ch[i]<='9'){while(ch[i]=='.'||(ch[i]>='0'&&ch[i]<='9')){top++;str[top]=ch[i];i--;}top++;str[top]=' ';}if(i<0)break;if(ch[i]==')'){count++;pt[count]=ch[i];} else if(ch[i]=='('){while(count>=0&&pt[count]!=')'){top++;str[top]=pt[count];count--;top++;str[top]=' ';}count--;}else if(ch[i]=='*'||ch[i]=='/'){count++;pt[count]=ch[i];}else{while((pt[count]=='*'||pt[count]=='/')&&count>=0&&pt[count]!=')'){top++;str[top]=pt[count];top++;str[top]=' ';count--;}count++;pt[count]=ch[i];}}// printf("%d\n",count);while(count>=0){if(pt[count]!=')'){top++;str[top]=pt[count];top++;str[top]=' ';count--;}}str[top]='\0';//printf("%s\n",str);t=strlen(str)-1;printf("%.2f\n",eval());}return 0;
}
NYOJ 35 表达式求值相关推荐
- NYOJ 35表达式求值
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出 ...
- nyoj 305 表达式求值 (递归)
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(2 ...
- nyoj 1272 表达式求值(中缀式转后缀式)
表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表达式,则 X+ ...
- NYOJ 305 表达式求值
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(2 ...
- NYOJ 305 表达式求值 (字符串处理)
题目链接 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等.经过训练, ...
- NYOJ 1272:表达式求值(2016河南省ACM-A)
表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表达式,则 X+ ...
- NOIP2013普及组 T2 表达式求值
OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream> 2 #include<algorithm> 3 #include&l ...
- [数据结构]表达式求值
一.问题描述 表达式求值是数学中的一个基本问题,也是程序设计中的一个简单问题.我们所涉及的表达式中包含数字和符号,本实验中处理的符号包括'+'.'-'.'*'.'/'.'('和')',要求按照我们所习 ...
- 严蔚敏《数据结构》C语言版 第三章 算法3.4 表达式求值
这个我是看到华为今年招聘的机试题的第三题. 输入一串算术表达式的字符串,把它的结果算出来. 1 //表达式求值(输入.输出和中间结果均只能是0-9)运算符仅限+-*/. 2 #include < ...
最新文章
- 张一鸣的微博世界-组织篇
- Netflix CEO哈斯廷斯:内容为王 公司潜力依然巨大
- MemCached配置与缓存知识概述
- train和test的列分布差异(covariate shift)观察
- EventUtil.addHandler方法
- 【Javascript 拾遗之三】Closure 闭包
- Activity的四种启动模式和onNewIntent()
- PyCharm 安装插件
- ZZ:WSS 扩展文件夹的属性--如何给文件夹添加扩展字段 from Jianyi0115
- 了解计算机网络拓扑结构,认识计算机网络拓扑结构
- Windows安装JDK
- Android即时通讯实现原理
- 哥德巴赫猜想“1+1″的证明(李扩继)
- 小D的一串数字(简单DP)
- Mybatis基础学习之万能的Map和模糊查询
- XCTF final noxss
- TCP/IP之大明内阁
- 苹果手机wifi很慢解决方法
- c语言调用json编程,c语言开发JSON - wangxuwei的个人空间 - OSCHINA - 中文开源技术交流社区...
- 推荐 :如何通过数据分析选品(以新零售为例)