【题目描述】
从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。
比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:
栈中的变化情况:
运行结果:-47
提示:输入字符串长度小于250,参与运算的整数及结果之绝对值均在264
范围内,如有除法保证能整除。
【输入】
一个后缀表达式。
【输出】
一个后缀表达式的值。
这个题目自己编译器可以成功,但是提交不成功,也不知道哪里出问题了
#include<cstdio>
#include <cstring>
using namespace std;
//数据初始化
int stack[101];
char s[249];
//处理函数
int cmp(char s[249]){
//初始数据
int i=0,top=0,x,y;
//事务处理
while(i<=strlen(s)-2){
switch(s[i]){
case '+':
stack[--top]+=stack[top+1];
break;
case '-':
stack[--top]-=stack[top+1];
break;
case '*':
stack[--top]*=stack[top+1];
break;
case '/':
stack[--top]/=stack[top+1];
break;
default:
x=0;
while(s[i]!=' '){
x=x*10+s[i++]-'0';
}
stack[++top]=x;
break;
}
i++;
}
//返回数据
return stack[top];
}
//主函数
int main(){
//数据初始化
gets(s);
//事务处理
int m=cmp(s);
//输出数据
printf("%d",m);
}