NYOJ 409 郁闷的C小加(三)
郁闷的C小加(三)
- 描述
-
聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为前缀和后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。
- 输入
-
第一行输入一个整数T,共有T组测试数据(T<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数并且小于1000000。
数据保证除数不会为0。 - 输出
- 对于每组测试数据输出结果包括三行,先输出转换后的前缀和后缀表达式,再输出计算结果,结果保留两位小数。
- 样例输入
-
2 1+2= (19+21)*3-4/5=
- 样例输出
-
+ 1 2 = 1 2 + = 3.00 - * + 19 21 3 / 4 5 = 19 21 + 3 * 4 5 / - = 119.20
-
AC码:
-
#include<stdio.h> #include<string.h> char pre[2500]; // 存储前缀 int k; double eval() {double x=0,t=0.1;while(pre[k]==' ')k--;if(pre[k]=='+'){k--;return eval()+eval();}if(pre[k]=='-'){k--;return eval()-eval();}if(pre[k]=='*'){k--;return eval()*eval();}if(pre[k]=='/'){k--;return eval()/eval();}while(pre[k]>='0'&&pre[k]<='9'){x=x*10+pre[k]-'0';k--;}if(pre[k]=='.'){k--;t=0.1;while(pre[k]>='0'&&pre[k]<='9'){x=x+(pre[k]-'0')*t;t=t*0.1;k--;}}return x; } int main() {int T;int pr,po,cr,co,len,len2,i;char chr[1000]; // 存储前缀的运算符char cho[1000]; // 存储后缀的运算符char str[1005]; // 读取字符串scanf("%d",&T);while(T--){scanf("%s",str);len=strlen(str);pr=-1;po=-1;cr=-1;co=-1;for(i=len-2;i>=0;i--){if(str[i]>='0'&&str[i]<='9'){while(str[i]=='.'||(str[i]>='0'&&str[i]<='9')){pr++;pre[pr]=str[i];i--;}pr++;pre[pr]=' ';}if(i<0)break;if(str[i]==')'){cr++;chr[cr]=str[i];}else if(str[i]=='('){while(cr>=0&&chr[cr]!=')'){pr++;pre[pr]=chr[cr];pr++;pre[pr]=' ';cr--;}cr--;}else if(str[i]=='*'||str[i]=='/'){cr++;chr[cr]=str[i];}else{while((chr[cr]=='*'||chr[cr]=='/')&&cr>=0&&chr[cr]!=')'){pr++;pre[pr]=chr[cr];pr++;pre[pr]=' ';cr--;}cr++;chr[cr]=str[i];}}while(cr>=0){pr++;pre[pr]=chr[cr];pr++;pre[pr]=' ';cr--;}pre[pr]='\0';len2=strlen(pre);for(i=len2-1;i>=0;i--)printf("%c",pre[i]);printf(" =\n");for(i=0;str[i]!='\0';i++){if(str[i]>='0'&&str[i]<='9'){while(str[i]=='.'||(str[i]>='0'&&str[i]<='9')){printf("%c",str[i]);i++;}printf(" ");}if(str[i]=='=')break;if(str[i]=='('){co++;cho[co]=str[i];}else if(str[i]==')'){while(co>=0&&cho[co]!='('){printf("%c ",cho[co]);co--;}co--;}else if(str[i]=='*'||str[i]=='/'){while(cho[co]=='*'||cho[co]=='/'){printf("%c ",cho[co]);co--;}co++;cho[co]=str[i];}else{while(co>=0&&cho[co]!='('){printf("%c ",cho[co]);co--;}co++;cho[co]=str[i];}}while(co>=0){printf("%c ",cho[co]);co--;}printf("=\n");k=len2-1;printf("%.2f\n",eval());}return 0; }
NYOJ 409 郁闷的C小加(三)相关推荐
- NYOJ409 郁闷的c小加三
传送门:http://acm.nyist.net/JudgeOnline/problem.php?pid=409 NYOJ郁闷的c小加一.二.三都是关于表达式转换及求值的,主要涉及栈知识点.郁闷的c小 ...
- NYOJ 267 郁闷的C小加(二)
郁闷的C小加(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)&quo ...
- NYOJ 257 郁闷的C小加(一)
郁闷的C小加(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操 ...
- NYOJ 236 心急的C小加
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间 ...
- nyoj 236 心急的C小加(偏序集问题)
描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需 ...
- NYOJ - 心急的C小加
心急的C小加 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位 ...
- 一加三折腾一下lineage
上篇文章说了一加三基于氧OS9.0.6安装kali nethunter:https://blog.csdn.net/Qwertyuiop2016/article/details/118105155 实 ...
- python编程剪刀石头布思路_剪刀石头布小习题三种语言python2、php、go代码
剪刀石头布小习题三种语言python2.php.go代码 # coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子 ...
- 一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁?
如题:一百馒头一百僧,大僧三个更无争,小僧三人分一个大小和尚得几丁? 要求使用java实现求得大僧小僧各有多少人? public class shdjshj {public static void m ...
最新文章
- 自己不清醒,却要拉更多人陪葬的人!
- 无数学不华为?人工智能时代的数学家还将走得更远
- python时间序列画图_简洁的Python时间序列可视化实现
- java map的遍历
- sharepoint 页面定制经验小结
- 大屏做成这样,领导不重用你都难
- 计算本周是几号到几号
- sql server 比较大小
- 计算机网络技术 网络参数配置与常用网络命令使用和网络仿真工具的使用
- 泛微8.0前端通用代码
- 中国工科研究生200多篇英文论文中最常见的习惯(The Most Common Habits from more than 200 English Papers written by Gradua)
- miui12和鸿蒙系统,鸿蒙2.0和miui12对比_鸿蒙2.0和miui12使用对比
- 清晰易懂的“K个一组翻转链表”解法
- 怎样招聘出色的产品经理
- 详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)
- 两物体的相对速度公式_为什么以光速相向飞行的两物体的相对速度不是2C?相对论还适用?...
- java null和空
- 六轴加速度传感器MPU6050官方DMP库到瑞萨RL78/G13的移植
- 宝宝取名的步骤及技巧
- VS2019 创建第一个.Net Core ABP项目