P1449 后缀表达式(洛谷题面)
题目
题目描述:
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
本题中运算符仅包含 +-*/。保证对于 / 运算除数不为 0。特别地,其中 / 运算的结果需要向 0 取整(即与 C++ / 运算的规则一致)。
如:3*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@。在该式中,@ 为表达式的结束符号。. 为操作数的结束符号。
输入格式:
输入一行一个字符串 s,表示后缀表达式。
输出格式:
输出一个整数,表示表达式的值。
数据范围与说明:
数据保证,1≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 109。
输入输出样例 #1
输入:
输出:
输入输出样例 #2
输入:
输出:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #include<bits/stdc++.h> using namespace std; stack<int> num; char s[10001]; char ccty[21]; int flag = 0, i = 0; int numa, numb, Num; int k = 0; int makernum(){ int ret=0; for(int i=0;i<=strlen(ccty)-1;++i){ if(ccty[i]=='*')break; ret=ret*10+ccty[i]-'0'; ccty[i]='*'; } return ret; } int main() { cin >> s; char cha = s[0]; while (cha != '@') { if (flag == 0) i = 0; if (cha >= '0' && cha <= '9') { flag = 1; ccty[i] = cha; i++; } if (cha == '.') { flag = 0; Num = makernum(); num.push(Num); } if ((cha < '0' || cha > '9') && cha != '.') { numa = num.top(); num.pop(); numb = num.top(); num.pop(); if (cha == '+') num.push(numb + numa); if (cha == '-') num.push(numb - numa); if (cha == '*') num.push(numb * numa); if (cha == '/') num.push(numb / numa); } k++; cha = s[k]; } cout << num.top() << endl; return 0; }
|