编程求一个后缀表达式的值

【问题描述】

从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(-)、乘(*)、除(/)四种运算符。
每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。
以@作为结束标志。

【算法分析】

后缀表达式的处理过程很简单,过程如下:
扫描后缀表达式,凡遇操作数则将之压进堆栈,与运算符则从堆栈中弹出两个操作数进行该运算,将运算结果压栈,然后继续扫描,直到后缀表达式被扫描完毕为止,此时栈底元素即为该后缀表达式的值。

代码分析

#include 
#include 
#include 
#include 
using namespace std;
int stack[101];
char s[256];
int comp(char s[256])
{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 ()
{printf("input a string (@_over):");gets(s);printf("result=%d",comp(s));return 0;
}

例题

【例1】后缀表达式的值

时间限制: 10 ms 内存限制: 65536 KB
提交数: 6618 通过数: 992

【题目描述】

从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。
每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。
以@作为结束标志。
提示:输入字符串长度小于250,参与运算的整数及结果之绝对值均在264范围内,如有除法保证能整除。

【输入】

一个后缀表达式。

【输出】

一个后缀表达式的值。

【输入样例】

16 9 4 3 +*-@

【输出样例】

-47

【来源】

No

【代码】

#include 
#include 
char a[10000];
long long stack[1000],top=-1;
int main()
{long long k=0,i=0,len,b,tag,d,e,f;char c;gets(a);len=strlen(a);while(i


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部