您当前的位置: 首页 > 

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

发布时间:2019-02-12 13:36:59 ,浏览量:0

【问题描述】

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

【算法分析】

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

代码分析
#include#include#include#includeusing 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            
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109966博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0994s