编程求一个后缀表达式的值
【问题描述】
从键盘读入一个后缀表达式(字符串),只含有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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
