用棧實現簡單計算器

2022-08-14 04:42:14 字數 2753 閱讀 6997

1) 輸入乙個逆波蘭表示式(字尾表示式),使用棧(stack), 計算其結果

2) 支援小括號和多位數整數,只支援對整數的計算。

從左至右掃瞄表示式,

遇到數字時,將數字壓入堆疊,

遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算(次頂元素 和 棧頂元素),並將結果入棧;

重複上述過程直到表示式最右端,最後運算得出的值即為表示式的結果。

1. public

class

polandnotation  else

29.                 stack.push(string.valueof(res));  

30.             }  

31.   

32.         }  

33.         int result = integer.parseint(stack.pop());//

最後留在 stack 中的資料是運算結果  

34.         system.out.println(suffixexpression + " = " +result);  

35.     }  

36.   

37.     //

判斷字串是否為數字  

38.     public

static

boolean

isnumeric(string str)   

42. }  

來自 //

www.planetb.ca/projects/syntaxhighlighter/popup.php>

注:此計算器只能進行加減乘除,且不能使用小括號

1、通過乙個index(索引),來遍歷表示式

2、如果發現是乙個數字,就直接入數棧

3、如果發現掃瞄到的是乙個符號,就分如下情況:

1、如果發現當前符號棧為空,就直接入棧

2、如果符號棧中有操作符,就進行比較:

1、如果當前的操作符的優先順序小於或等於棧中的操作符,就需要從數棧中pop出兩個數,從符號棧中pop出乙個符號,進行運算,將得到的結果入數棧,再將當前的操作符(index所指)入符號棧。

2、如果當前的操作符的優先順序大於棧中的操作符,就直接入符號棧。

4、當表示式掃瞄完畢,就順序的從數棧和符號棧中pop出相應的數和符號,並進行運算,將得到的結果入數棧

5、最後在數棧中的結果即為表示式的結果

用陣列實現棧來完成,棧相關操作**略:(arraystack類)

1. //

返回運算子的優先順序,優先順序是程式設計師來確定, 優先順序使用數字表示  

2.     //

數字越大,則優先順序就越高.  

3.     public

int priority(int

oper)  else

if (oper == '+' || oper == '-')  else

return -1;//

假定目前的表示式只有 +, - , * , /  

9.   

10.     }  

11.   

12.     //

判斷是不是乙個運算子  

13.     public

boolean isoper(char

val)   

16.   

17.     //

計算方法  

18.     public

int cal(int num1, int num2, int

oper)   

36.         return

res;  

37.     }  

來自 //

www.planetb.ca/projects/syntaxhighlighter/popup.php>

測試類:

1. public

class

caculatortest  else  else   

30.                 }  

31.             } else   

35.         }  

36.        //

當表示式掃瞄完畢,就順序的從 數棧和符號棧中 pop 出相應的數和符號,並執行  

37.         while (true

)   

42.             num1 =numstack.pop();  

43.             num2 =numstack.pop();  

44.             res =numstack.cal(num1, num2, operstack.pop());  

45.             numstack.push(res);  

46.         }  

47.         int result = numstack.pop();//

將數棧的最後數,pop出,就是結果  

48.         system.out.printf("表示式 %s = %d", expression, result);  

49.     }  

50. }  

來自 //

www.planetb.ca/projects/syntaxhighlighter/popup.php>

用棧實現計算器

我們平時用swith語句寫的計算器,只能處理簡單的兩個運算元和乙個運算子,這樣其實和日常應用方面差的有點遠,所以我們今天學習了一種用棧來實現一條複雜表示式的計算。這個需要用到棧的相關知識,除此之外我們還需要學會如何把中綴轉換成字尾表示式,比如 3 4 5 2 3這樣乙個表示式,從左至右遇到運算元壓入...

用棧實現的計算器

問題描述 描述 從鍵盤輸入乙個算術表示式 保證是整數 並輸出它的結果 保證資料中除法是整除 輸入 輸入一行字串表示算術表示式包括0.9,輸出 每行輸出計算結果 規則 1.自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。2.當遇到運算子時如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取...

C C 用棧實現計算器

使用棧實現計算器,最主要的就是進行運算子的優先順序判斷,然後進行對應的計算,然後將其壓入棧和從棧中取出來。其中要對輸入的表示式進行判斷,如果表示式不符合的話就直接不用計算。下面直接上 include include include using namespace std const int maxs...