【例1-2】后缀表达式的值
时间限制: 10 ms 内存限制: 65536 KB
提交数: 850 通过数: 119
【题目描述】
从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。
比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:
栈中的变化情况:
运行结果:-47
提示:输入字符串长度小于250,参与运算的整数及结果之绝对值均在264264范围内,如有除法保证能整除。
【输入】
一个后缀表达式。
【输出】
一个后缀表达式的值。
【输入样例】
16 9 4 3 +*-@
【输出样例】
-47
【算法分析】
就是上面的图。
【代码实现】
#include<bits/stdc++.h>
using namespace std;
char s[256];
int num[256];
int comp(char s[256])
{
int i=0,top=0,x,y;
while(i<=strlen(s)-2)
{
switch(s[i])
{
case'+':num[--top]+=num[top+1];break;//运算符
case'-':num[--top]-=num[top+1];break;
case'/':num[--top]/=num[top+1];break;
case'*':num[--top]*=num[top+1];break;
default: x=0; while(s[i]!=' ') x=x*10+s[i++]-'0';//数
num[++top]=x; break;//top++;num[top
}
i++;
}
return num[top];
}
int main()
{
gets(s);
cout<<comp(s)<<endl;
}
16 9 4 3 +*-@
//for(int j=0;j<=i;j++)
cout<<num[j]<<" ";
cout<<endl;0 16 0
0 16 9 0 0
0 16 9 4 0 0 0
0 16 9 4 3 0 0 0 0
0 16 9 7 3 0 0 0 0 0
0 16 63 7 3 0 0 0 0 0 0
0 -47 63 7 3 0 0 0 0 0 0 0
-47
Process returned 0 (0x0) execution time : 2.474 s
Press any key to continue.
标签:运算,16,后缀,int,256,表达式
From: https://blog.51cto.com/u_14932227/6149360