簡單計算器 PTA

2021-09-11 21:17:48 字數 3126 閱讀 4939

模擬簡單運算器得工作,假設計算器只能進行加減乘除運算,運算數和結果都是整數,四種運算子的

優先順序相同,按從左到右的順序計算。[^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或有非法運算子,則輸出...