做网站用源码,库存管理软件免费 哪个好,移除wordpress版本,做网站设计挣钱吗后缀表达式#xff0c;又称逆波兰式#xff0c;指的是不包含括号#xff0c;运算符放在两个运算对象的后面#xff0c;所有的计算按运算符出现的顺序#xff0c;严格从左向右进行。
运用后缀表达式进行计算的具体做法#xff1a;
建立一个操作数栈S。然后从左到右读表达… 后缀表达式又称逆波兰式指的是不包含括号运算符放在两个运算对象的后面所有的计算按运算符出现的顺序严格从左向右进行。
运用后缀表达式进行计算的具体做法
建立一个操作数栈S。然后从左到右读表达式如果读到操作数就将它压入栈S中如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项操作数进行运算再将运算的结果代替原栈顶的n项压入栈中。重复上面过程如果后缀表达式读完且栈中只剩一个操作数则该数就是运算结果如果后缀表达式读完但是栈中操作数多于一个则后缀表达式错误如果栈中操作数只剩一个但是后缀表达式还未读完且当前运算符为双元操作符则后缀表达式同样错误。
输入格式:
在一行中输入一个以#号结束的非空后缀式#不属于表达式的一部分操作数和运算符都以空格分隔运算数为绝对值不超过100的整数运算符仅有、-、*、/ 四种。
输出格式:
输出后缀式计算结果所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过109。
如果执行除法时出现分母为零的非法操作则在一行中输出Error: X/0X是当时的分子。
如果后缀表达式中运算符多了或者少了则在一行中输出Expression Error: XX是当时栈顶元素。
输入样例1:
5 -2 3 * #输出样例1:
9输入样例2:
5 -2 2 / #输出样例2:
Error: 5/0输入样例3:
5 -1 3 / - * #输出样例3:
Expression Error: 2
#includeiostream
#includestring
#includesstream
#includestack
using namespace std;
int judge(string ch)
{if (ch || ch - || ch * || ch /)return 1;elsereturn 0;
}
int jisuan(int n1, int n2, string ch)
{if (ch )return n1 n2;else if (ch -)return n1 - n2;else if (ch *)return n1 * n2;elsereturn n1 / n2;
}
int main()
{stackint num;int a,k0;int n1, n2, n3;string ch;while (cin ch){if (ch #)break;if (!judge(ch)){stringstream stream;stream ch; stream a;num.push(a);}else{n1 num.top();num.pop();if (num.empty()){cout Expression Error: n1;break;}n2 num.top();num.pop();if (n1 0 ch /){cout Error: n2 / n1;break;}else{n3 jisuan(n2, n1, ch);num.push(n3);}}}if (num.size() 2ch#)cout num.top() endl;if (num.size() 2ch#)cout Expression Error: num.top();
}