NYOJ-267 郁闷的C小加(二)
郁闷的C小加(二)
- 描述
-
聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。
- 输入
- 第一行输入一个整数T,共有T组测试数据(T<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数并且小于1000000。
数据保证除数不会为0。 - 输出
- 对于每组测试数据输出结果包括两行,先输出转换后的后缀表达式,再输出计算结果,结果保留两位小数。两组测试数据之间用一个空行隔开。
- 样例输入
-
2
1+2=
(19+21)*3-4/5= - 样例输出
-
12+=
3.00 1921+3*45/-=
119.20 - 来源
- 改编自NYOJ
-
#include <cstdio>
#include <iostream>
#include <cstring>
#include <stack>
#include <cctype> using namespace std; char str[];
stack<char> Optr;
stack<float> Opnd; char judge(char c1, char c2)
{
if(c1 == '+' || c1 == '-')
{
if(c2 == '*' || c2 == '/' || c2 == '(')
return '<';
else
return '>';
}
if(c1 == '*' || c1 == '/')
{
if(c2 == '(')
return '<';
return '>';
}
if(c1 == '(' && c2 == ')' || c1 == '=' && c2 == '=')
return '=';
return '<';
} float cal(float num1, float num2, char p)
{
if(p == '+')
return num1 + num2;
else if(p == '-')
return num1 - num2;
else if(p == '*')
return num1 * num2;
else if(p == '/')
return num1 / num2;
} void change()
{
int len = strlen(str);
while(!Opnd.empty())
Opnd.pop();
while(!Optr.empty())
Optr.pop();
Optr.push('='); for(int i = ; i < len;)
{
if(isdigit(str[i]) || str[i] == '.')
{
float t1 = ;
int t2 = ;
bool flag = false;
while(isdigit(str[i]) || str[i] == '.')
{
if(flag)
t2 *= ;
if(isdigit(str[i]))
t1 = t1*+str[i]-'';
else
flag = true;
printf("%c", str[i]);
++i;
}
Opnd.push(t1/t2);
}
else
{
char tmp = judge(Optr.top(), str[i]);
if(tmp == '<')
{
Optr.push(str[i]);
++i;
}
else if(tmp == '>')
{
tmp = Optr.top();
printf("%c", tmp);
Optr.pop();
float num1 = Opnd.top();
Opnd.pop();
float num2 = Opnd.top();
Opnd.pop();
Opnd.push(cal(num2, num1, tmp));
//++i;
}
else
{
Optr.pop();
++i;
}
}
}
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%s", str);
change();
printf("=\n%.2f\n", Opnd.top());
if(T)
printf("\n");
}
return ;
}
NYOJ-267 郁闷的C小加(二)的更多相关文章
- NYOJ 267 郁闷的C小加(二) (字符串处理)
题目链接 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)"),C小加很高兴.但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值 ...
- NYOJ 409 郁闷的C小加(三) (字符串处理)
题目链接 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)"),C小加很高兴.但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值 ...
- nyoj 409——郁闷的C小加(三)——————【中缀式化前缀后缀并求值】
郁闷的C小加(三) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很 ...
- NYOJ 257 郁闷的C小加(一)
郁闷的C小加(一) 时间限制:1000 ms | 内存限制:65535 KB 难度: 描写叙述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说) ...
- nyoj 257 郁闷的C小加(一)(栈、队列)
郁闷的C小加(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...
- NYOJ 257 郁闷的C小加(一) (字符串处理)
题目链接 描述 我们熟悉的表达式如a+b.a+b(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2.同理,后缀表达式就是操作符 ...
- nyoj-257 郁闷的C小加(一) 前缀表达式变后缀
郁闷的C小加(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...
- 郁闷的C小加(一)(后缀表达式)
郁闷的C小加(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...
- nyoj 236 心急的C小加
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的 ...
随机推荐
- centos 安装php7、pecl 、swoole、redis拓展
一.更新yum源,安装php7 CentOS/RHEL 7.x: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest- ...
- 1021 Deepest Root (25)(25 point(s))
problem A graph which is connected and acyclic can be considered a tree. The height of the tree depe ...
- s3c2440地址分配
mini2440的地址怎么分配.mini2440处理器的地址怎么分配. S3C2440处理器可以使用的物理地址空间可以达到4GB,其中前1GB的地址为连接外设的地址空间.>1G的地址空间 分配给 ...
- BZOJ 3956: Count 主席树 可持久化线段树 单调栈
https://www.lydsy.com/JudgeOnline/problem.php?id=3956 从描述可以得到性质: 每个好点对 ( 除了差值为1的好点对 ) 中间的数 ( i , j ) ...
- C# 中判断字符串是否包含另一段字符串,请使用 Contains
使用:Contains 比 IndexOf 的性能提高很多. 因为 Contains 是判断某个字符串是否在另外一个字符串中,而IndexOf需要返回下标值.
- 河南省队选拔 HAOI2015 解题报告
其实省选在四天前就已经结束了,但由于题目难度略大我到今天上午才补完所有题目……(捂脸逃)考场上很幸运,打完了所有我会写的部分分,最后Round1的110分 + Round2的70分,勉强算是没有被 ...
- Codeforces Round #353 (Div. 2) C. Money Transfers 数学
C. Money Transfers 题目连接: http://www.codeforces.com/contest/675/problem/C Description There are n ban ...
- hihocoder #1301 : 筑地市场 二分+数位dp
#1301 : 筑地市场 题目连接: http://hihocoder.com/problemset/problem/1301 Description 筑地市场是位于日本东京都中央区筑地的公营批发市场 ...
- hdu 2251 Dungeon Master bfs
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17555 Accepted: 6835 D ...
- Linux下Nginx+多Tocat下的负载均衡环境的简单搭建
本文主要分为四个部分: 1.Nginx的搭建:2.JDK+Tomcat的搭建:3.静态HTML的访问配置:4.负载均衡的配置 ===================================== ...