题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5-2)+7}3*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@ 在该式中,@ 为表达式的结束符号。. 为操作数的结束符号。
输入格式
输入一行一个字符串 ss,表示后缀表达式。
输出格式
输出一个整数,表示表达式的值。
输入输出样例
输入
3.5.2.-*7.+@
输出
16
#include
using namespace std;
int main()
{
stack<int> nub_stack;
string s;
int temp[12]; //临时数组存放数据
cin>>s;
int j;
int num;
for(int i = 0;i < s.size();i ++ ){
if(s[i] >= '0' && s[i] <= '9'){
j = 0;
temp[j] = s[i];
j++;
for(int p = i+1; ;p ++)
{
if(s[p] != '.'){
temp[j]= s[p];
j++;
}
else{
int t = 0;
int nu;
for(int q = j - 1;q >= 0; q --){
nu += temp[q] * pow(10,t);
t++;
}
nub_stack.push(nu);
}
}
}
int m,n;
m = nub_stack.top();
nub_stack.pop();
n = nub_stack.top();
if(s[i] == '*')
num = m * n;
if(s[i] == '+')
num = m + n;
if(s[i] == '-')
num = n - m;
if(s[i] == '/')
num = n / m;
}
cout<
结果没有输出,不知道哪里出错了
17行的for循环,你的结束条件在哪?