后缀表达式
来源:互联网 发布:linux dd命令安装系统 编辑:程序博客网 时间:2024/05/21 07:50
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入格式:
输入:后缀表达式
输出格式:
输出:表达式的值
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>using namespace std;int a[1001];int t1 = 0,la = 0;char c[1001],tmp[1001];int read_In() { int a = 0; bool minus = false; char ch = getchar(); while (!(ch == '-' || (ch >= '0' && ch <= '9'))) ch = getchar(); if (ch == '-') { minus = true; ch = getchar(); } while (ch >= '0' && ch <= '9') { a = a * 10 + (ch - '0'); ch = getchar(); } if (minus) a = -a; return a;}void printOut(int x) { char buffer[20]; int length = 0; bool minus = x < 0; if (minus) x = -x; do { buffer[length++] = x % 10 + '0'; x /= 10; } while (x); if (minus) buffer[length++] = '-'; do { putchar(buffer[--length]); } while (length); putchar('\n');}void judge(char t) { switch (t) { case '+': a[--la] = a[la] + a[la+1]; a[la+1] = 0; //注意清零 return; case '-': a[--la] = a[la] - a[la+1]; a[la+1] = 0; return; case '*': a[--la] = a[la] * a[la+1]; a[la+1] = 0; return; case '/': a[--la] = a[la] / a[la+1]; a[la+1] = 0; return; }}int main() { int lb = 0; while(1) { tmp[++t1] = getchar(); if(tmp[t1] == '@') { t1--; break; } } for(int i = 1; i<=t1; i++) { if(tmp[i] == '.') { continue; } if(tmp[i] >= '0' && tmp[i] <= '9' && !(tmp[i-1] >= '0' && tmp[i-1] <= '9')) { la++; } if(tmp[i] >= '0' && tmp[i] <= '9') { a[la] *= 10; a[la] += tmp[i] - '0'; } if(tmp[i] == '/' || tmp[i] == '*' || tmp[i] == '+' || tmp[i] == '-') { c[++lb] = tmp[i]; judge(c[lb]); } } cout<<a[1]; return 0;}
注意一些细节问题,就这样吧,没什么说的,题目本身没有什么难度
阅读全文
0 0