表达式求值

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述
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 表达式求值相关推荐

  1. NYOJ 35表达式求值

    表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出 ...

  2. nyoj 305 表达式求值 (递归)

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(2 ...

  3. nyoj 1272 表达式求值(中缀式转后缀式)

    表达式求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表达式,则 X+ ...

  4. NYOJ 305 表达式求值

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(2 ...

  5. NYOJ 305 表达式求值 (字符串处理)

    题目链接 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等.经过训练, ...

  6. NYOJ 1272:表达式求值(2016河南省ACM-A)

    表达式求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表达式,则 X+ ...

  7. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream> 2 #include<algorithm> 3 #include&l ...

  8. [数据结构]表达式求值

    一.问题描述 表达式求值是数学中的一个基本问题,也是程序设计中的一个简单问题.我们所涉及的表达式中包含数字和符号,本实验中处理的符号包括'+'.'-'.'*'.'/'.'('和')',要求按照我们所习 ...

  9. 严蔚敏《数据结构》C语言版 第三章 算法3.4 表达式求值

    这个我是看到华为今年招聘的机试题的第三题. 输入一串算术表达式的字符串,把它的结果算出来. 1 //表达式求值(输入.输出和中间结果均只能是0-9)运算符仅限+-*/. 2 #include < ...

最新文章

  1. 张一鸣的微博世界-组织篇
  2. Netflix CEO哈斯廷斯:内容为王 公司潜力依然巨大
  3. MemCached配置与缓存知识概述
  4. train和test的列分布差异(covariate shift)观察
  5. EventUtil.addHandler方法
  6. 【Javascript 拾遗之三】Closure 闭包
  7. Activity的四种启动模式和onNewIntent()
  8. PyCharm 安装插件
  9. ZZ:WSS 扩展文件夹的属性--如何给文件夹添加扩展字段 from Jianyi0115
  10. 了解计算机网络拓扑结构,认识计算机网络拓扑结构
  11. Windows安装JDK
  12. Android即时通讯实现原理
  13. 哥德巴赫猜想“1+1″的证明(李扩继)
  14. 小D的一串数字(简单DP)
  15. Mybatis基础学习之万能的Map和模糊查询
  16. XCTF final noxss
  17. TCP/IP之大明内阁
  18. 苹果手机wifi很慢解决方法
  19. c语言调用json编程,c语言开发JSON - wangxuwei的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. 推荐 :如何通过数据分析选品(以新零售为例)

热门文章

  1. Python全栈 MongoDB 数据库(数据的修改)
  2. Gson 使用总结 高级用法
  3. 如何修改WAMP中mysql默认空密码
  4. 面向.Net程序员的前端优化
  5. 一个很简单的淡入淡出相册 (转)
  6. 用友软件工程IT应用研究院
  7. 使用java导入某个msn帐号的好友列表并发送消息
  8. day for people, night for material
  9. introduction to mechanism
  10. partial equation lecture first order pde lecture 1