【问题描述】
从键盘读入一个后缀表达式(字符串),只含有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关注打赏