模擬簡單運算器得工作,假設計算器只能進行加減乘除運算,運算數和結果都是整數,四種運算子的
優先順序相同,按從左到右的順序計算。[^1]
【輸入格式】
輸入在一行中給出乙個四則運算算式,沒有空格,且至少有乙個運算元,遇到等號"=「說明輸入結束。
【輸出格式】
在一行中輸出算式結果,或者如果除法分母為0或非法運算子,則輸出錯誤"error」.
【輸入樣例】
1+2*10-10/2=
【輸出樣例】
10
#inclde
using namespace std;
intmain()
else
if(b==
'*')
else
if(b==
'-')
else
if(b==
'/')
ans/
=a; b=
getchar()
;}else
if(b==
' ')
b=getchar()
;else
cout<<
"error";}
cout<}
[^1]:處降低題目的難度
下面是優先順序不同時的情況:為實現運算子優先演算法,可以使用兩個工作棧。乙個稱做
optr,用以寄存運算子;另乙個稱為opnd,用以寄存運算元或結果。演算法的基本思想是:
(1) 首先置運算元棧為空棧,表示式起始符"#「為運算子棧的棧頂元素;
(2) 依次讀入表示式中每個字元,若是運算元則進opnd棧,若是運算子則和optr棧
的棧頂元素比較優先權後作相應操作,至到整個表示式求值完畢(即optr)棧頂元素和當前讀入的字元均位」#"
operandtype evaluateexpression()
else
switch
(precede
(gettop
(opnd)
,c))
//switch
}//while
return
gettop
(o pnd);}
//evaluateexpression
【**摘至資料結構[嚴蔚敏]
**】
書上並沒有寫具體的函式,下面是我自己寫的:
#include
#include
using namespace std;
#define n 100
typedef
struct optr* l;
struct optr
;char
evaluateexpression()
;void
init
(stack l *p)
;char
gettop
(l p)
;void
pop(l p,
char
&a);
intin
(char c,
char op)
;char
precede
(char a,
char c)
;char
operate
(char a,
char c,
char b)
;int
main()
char
evaluateexpression()
;initstack
(&optr)
;push
(optr,
'#')
;initstack
(&opnd);c=
getchar()
;while
(c!=
'#'||
gettop
(optr)
!='#'
)else
switch
(precede
(gettop
(optr)
,c))
//switch
}//while
return
gettop
(opnd);}
//evaluateexpression
void
initstack
(l *p)
void
push
(l p,
char a)
void
pop(l p,
char
&c)intin(
char c,
char op)
return0;
}char
precede
(char a,
char c),,
,,,,
,};for
(int i=
0;i<
2;i++
)else
if(a==
'-')
else
if(a==
'*')
else
if(a==
'/')
else
if(a==
'(')
else
if(a==
')')
else
a=c;
if(flag==0)
}//cout[a0];}
char
operate
(char a,
char c,
char b)
else
if(c==
'-')
else
if(c==
'*')
else
return
(a-'0')/
(b-'0');
}}
但存在乙個問題:**裡的資料都是字元型對於pop()出來的a,b如果a*b>10,字元不能一下子push()完,該如何儲存呢,
令人困惑,如有大佬看見希望可以指點指點。
簡單計算器(PTA)
模擬簡單運算器的工作。假設計算器只能進行加減乘除運算,運算數和結果都是整數,四種運算子的優先順序相同,按從左到右順序計算。輸入格式 輸入在一行中給出乙個四則運算算式,沒有空格,且至少有乙個運算元。遇等號 說明輸入結束。輸出格式 在一行中輸出算式的運算結果,或者如果除法分母為0或有非法運算子,則輸出錯...
PTA簡單計算器
一 題目描述 二 解題思路 這題設計兩個棧就可以做出來了,屬於簡單資料結構的應用,判斷一下除零的情況即可 三 實現 1 include bits stdc h 2 using namespace std 3 stack s1 4 stack s2 5int main 615 for int i 1 ...
PTA 習題6 7 簡單計算器 20分
模擬簡單運算器的工作。假設計算器只能進行加減乘除運算,運算數和結果都是整數,四種運算子的優先順序相同,按從左到右的順序計算。輸入格式 輸入在一行中給出乙個四則運算算式,沒有空格,且至少有乙個運算元。遇等號 說明輸入結束。輸出格式 在一行中輸出算式的運算結果,或者如果除法分母為0或有非法運算子,則輸出...