编程求一个后缀表达式的值
生活随笔
收集整理的這篇文章主要介紹了
编程求一个后缀表达式的值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】
從鍵盤讀入一個后綴表達式(字符串),只含有0-9組成的運算數及加(+)、減(-)、乘(*)、除(/)四種運算符。
每個運算數之間用一個空格隔開,不需要判斷給你的表達式是否合法。
以@作為結束標志。
【算法分析】
后綴表達式的處理過程很簡單,過程如下:
掃描后綴表達式,凡遇操作數則將之壓進堆棧,與運算符則從堆棧中彈出兩個操作數進行該運算,將運算結果壓棧,然后繼續掃描,直到后綴表達式被掃描完畢為止,此時棧底元素即為該后綴表達式的值。
代碼分析
#include <cstdio> #include <cstdlib> #include <string> #include <cstring> 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 <stdio.h> #include <string.h> 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<len){b=0,tag=0;while(i<len&&'0'<=a[i]&&a[i]<='9')b*=10,b+=a[i]-'0',i++,tag=1;if(tag) top++,stack[top]=b;else if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'){d=stack[top],top--;e=stack[top],top--;switch(a[i]){case '+':f=e+d;break;case '-':f=e-d;break;case '*':f=e*d;break;case '/':f=e/d;break;}top++;stack[top]=f;i++;}else i++;}printf("%lld",stack[top]);return 0; }總結
以上是生活随笔為你收集整理的编程求一个后缀表达式的值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 括号的匹配(表达式的合法性检查)
- 下一篇: python人工智能——机器学习——特征