輸入乙個中綴表示式(由 0-9組成的運算數、加「+」、減「-」、乘「×」、除「/」四種運算子、左右小括號組成。注意「-」也可作為負數的標誌,表示式以「@」作為結束符),判斷表示式是否合法,如果不合法,請輸出「no」;否則請把表示式轉換成字尾形式,再求出字尾表示式的值並輸出。
注意:必須用棧操作,不能直接輸出表示式的值。
輸入格式:
第一行為乙個以@結束的字串。
輸出格式:
如果表示式不合法,請輸出「no」,要求大寫。
如果表示式合法,請輸出計算結果。
輸入樣例:
1+2×8-9@
輸出樣例:
8
(注意使用棧)
這道題應先將中綴轉字尾在進行計算,**如下:
#include #include#include
#include
using
namespace
std;
int priority(char c)//
比較優先順序
string
s;stack
opt;
string
ans;
stack
a; intbox,box1,box2,box3;
int u[1000000
];int
x,y;
intmain()}}
for(int i=0;i)
i--;
ans+="";
}else
if(s[i]=='
(')//
為左括號,直接入棧
opt.push(s[i]);
else
if(s[i]=='
)')//
為右括號,將棧頂元素出棧,直到碰到左括號
opt.pop();
//將左括號出棧
}
else
if(opt.empty())//
棧為空,將運算子直接入棧
else
opt.push(s[i]);
//將運算子入棧
} }
while(!opt.empty())//
將棧中的剩餘元素出棧
for(int i=0;i)
if(box!=0
)a.push(box);
if(ans[i]>=42&&ans[i]<=47
)
}cout
;
return0;
}
中綴表示式
實現 直接計算中綴表示式 不含括號 include include includeusing namespace std 運算符號優先順序比較 加減為低階運算,乘除是高階運算 先算乘除 return 1 means can calculate,else can not.int getpriority...
中綴表示式 字尾表示式
中綴表示式就是 a b 這樣的,運算子在兩個數的中間 字尾表示式就是 a b 這樣的,運算子在兩個數後面 再細分一下 中綴表示式 字尾表示式 a b c a b c a b c a b c a b c a b c a b c a b c a b c d e a c a b c d e a c emm...
中綴表示式 字尾表示式
數學表示式稱為中綴表示式,符合人的思考習慣 1 2 3運算子放在數字後面,符合計算機運算 123 遍歷中綴表示式中的數字和符號 左括號 入棧 運算符號 需要與棧頂符號進行優先順序比較 遍歷結束 將棧中所有符號彈出並輸出。例 中綴表示式 1 2 5 3 4 2 1 1 數字1直接輸出 結果 1 棧 空...