【7013】编程求一个后缀表达式的值
来源:互联网 发布:淘宝卖家上传视频教程 编辑:程序博客网 时间:2024/06/04 20:03
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
从键盘读入一个后缀表达式(字符串),只含有0~9组成的运算数及加减乘除四种运算符,每个运算数之间用一个空格隔开,运算数个数不超过30个,不需要判断给你的表达式是否合法,以@为结束标志。(不排除@后面还有内容)【输入格式】
1行字符,每个数字后面用空格隔开,运算符不用空格。
【输出格式】
一行,运算出来的结果,结果保留整数。
Sample Input
16 9 4 3 +*-@
Sample Output1
-47
【题解】这题的难度在于字符串的处理上。我们读入了一个字符串。但是我们不知道其是数字还是负号。所以要进行判断。如果s[0]∈[+ * /]则是符号。但是如果s[0] == '-',则需要后续判断因为这可能是一个负数。然后如果这个s的长度为1,则是符号。如果长度不为1,则看一下s[1]是否为数字,如果为数字,则我们读入的是一个数字。否则我们读入的是一系列的符号。读到符号就把栈顶的两个元素做相应的运算。下面那个 操作符 上面那个。然后top--;stack[top] = 运算结果。//而前缀表达式则是 上面那个 操作符 下面那个。会出现/*5这样的情况。即符号和数字连在了一起。要注意处理。【代码】#include <cstdio>#include <string>#include <iostream> #include <stdlib.h>using namespace std;int top = 0;double stack[255];int main(){//freopen("F:\\rush.txt","r",stdin);string s;getline(cin,s);int p = s.find('@',0);//先找到终止符的位置 s = s.substr(0,p); //截出这段需要计算的后缀表达式 s+=" ";//加一个空格。方便处理 p = s.find(' ',0); //找空格的位置 while (p!=-1){string ss = s.substr(0,p); //截出需要判断的这段序列 bool issymbol = false,isnumber = false; //用来判断是数字还是操作符 if (ss[0]=='-') //如果第一个字符是一个负号则需要多重判断 {if (ss.size() == 1) //如果就只有一个负号,则是操作符 issymbol = true;else //否则 还要看一下第二个字符是什么 if (ss[1] >='0' && ss[1] <='9') //如果第二个字符是数字,则是数字 isnumber = true;}else if (ss[0] == '*' || ss[0] == '/' || ss[0] == '+') //如果是其他负号 则一定是符号 issymbol = true;elseisnumber = true;//否则就是数字 if (isnumber) //如果是数字,则入栈 { top++;stack[top] = atoi(ss.c_str()); //atoi是把字符转换成Int类型 } else{int j = 0;while (j <= ss.size()-1) //从第0个位置开始扫描 {if (ss[j] >='0' && ss[j] <='9') //如果在操作符中间出现了数字,则终止。并记录这个数字位置 {//之后会把这个数字之前的字符截掉,然后我们会对这个掺杂的数字再进行处理(空格还在那里) p = j-1;break;}double x; //因为涉及到除法运算 所以用实型 if (ss[j] == '*') //根据字符 做相应的运算即可。 {x = stack[top-1]*stack[top];top--;stack[top] = x;}if (ss[j] == '-'){x = stack[top-1]-stack[top];top--;stack[top] = x;}if (ss[j] == '+'){x = stack[top-1]+stack[top];top--;stack[top] = x;}if (ss[j] == '/'){x = stack[top-1]/stack[top];top--;stack[top] = x;}j++;}}s = s.erase(0,p+1);//连同空格一起删掉。 p = s.find(' ',0);//然后继续找那个空格的位置 }printf("%.0lf",stack[top]);//要保留整数输出。 return 0;}
0 0
- 【7013】编程求一个后缀表达式的值
- 求后缀表达式的值
- 求后缀表达式的值
- C++ 求后缀表达式的值
- 中缀表达式转后缀表达式_求表达式的值
- 【数据结构】利用后缀表达式求表达式的值
- 给出一个函数表达式, 编程求它的函数值
- 栈的应用—中缀转后缀求表达式值
- 求后缀表达式
- 编写一个程序计算后缀表达式的值
- 求前缀表达式的值(pat), 后缀表达式求解(leetcode)
- 求前缀表达式转后缀表达式的方法(pascal)
- 解释一个求表达式值的过程?
- 如何求一个字符串表达式的值?
- C/C++ 已知中缀表达式,求后缀表达式及值
- 计算后缀表达式的值
- 前缀、中缀、后缀表达式实现表达式的编程
- 表达式的后缀表达式
- tjut 5777
- 7.31_day2
- java转型和加载
- hdu 5777 贪心
- 怎么用干发帽有用吗
- 【7013】编程求一个后缀表达式的值
- 判断是否为素数
- linux--nginx安装-使用教程
- 广大盆友们,gjh又要出山写书了!!!
- java设计模式_组合模式
- 算法的简单概况
- BigDecimal除法后保留两位小数
- 暑期集训训练赛2(uva11210) 你会打麻将吗?
- BestCoder Round #85 <同余--贪心--单质数判断+枚举>