簡易計算器

2022-08-05 11:12:18 字數 1294 閱讀 2002

1.讀入一個只包含 +, -, *, / 的非負整數計算表示式,計算該表示式的值。

2.input測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用一個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。

3.output對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位。

這道題的難處在於如何判斷運算的先後順序,仔細思考下我們就知道可以利用stack來儲存我們需要的數字,而運算子僅作判斷使用。

我們又知道——我們輸入的時候先 數字 再 運算子;故可用兩個while()進行輸入;(因為一開始的輸入規則和後面的規則有所區別)

講一下這道提題的難點。

1.輸入格式的把握;

兩個while(),先輸入數字 cin >> n; 在輸入運算子 c=getchar();

或利用string s; 這就需要多個if()來判斷哪些應該是整數並將其轉化為數值;(較為複雜,但在第二種方法中使用);

2.運算子的先後;

建一個stackarray; 先壓數字 ,根據前一個的運算子判斷——如果是“*”或 “/”則把即將壓棧的數值和棧的頂值相乘,再壓棧;

或兩個棧,一個數值棧,一個運算子棧,寫一個函式compare()比較運算子大小——然後可以直接寫運算的方法,不再考慮運算先後;再一個壓棧的方法(邊壓棧,邊計算結果);

#include #include 

#include

#include

#include

using

namespace

std;

stack

num;

intmain()

if(c=='/'

)

if(c=='+'

)

if(c=='-'

)

if(getchar()=='\n'

)

break

; c =getchar();

}double sum = 0

;

while(!num.empty())

printf(

"%0.2lf\n

",sum);

}return0;

}

有所鑑借;