四則運算表示式求值(可以計算小數和帶括號)

2021-10-07 10:20:09 字數 3297 閱讀 9517

完整**

input

一行,乙個四則運算表示式。』*『表示乘法,』/'表示除法

輸入樣例1:

3.4輸入樣例2:

7+8.3

輸入樣例3:

3

+4.5∗(

7+2)

∗(3)

∗((3

+4)∗

(2

+3.5)/

(4+5

))−34

∗(7−

(2+3

))

3+4.5*(7+2)*(3)*((3+4)*(2+3.5)/(4+5))-34*(7-(2+3))

3+4.5∗

(7+2

)∗(3

)∗((

3+4)

∗(2+

3.5)

/(4+

5))−

34∗(

7−(2

+3))

output

一行,該表示式的值,保留小數點後面兩位

輸出樣例1:

3.40

輸出樣例2:

15.30

輸出樣例3:

454.75

判斷左括號

判斷有括號

判斷數字,有小數需要判斷

判斷符號,計算

不斷彈出計算

標頭檔案匯入
會用到stack來對數字和符號進行儲存,也會用到string

#include

#include

#include

#include

using

namespace std;

定義全域性變數
需要的全域性變數:

用來儲存表示式的字元陣列s,儲存每乙個數字的用作中間變數字元陣列temp

符號棧opt,數字棧item

const

int maxn =

1000

;// 常量

char s[maxn]

, temp[maxn]

;// 乙個用於儲存表示式,乙個用於儲存數字從字元陣列轉化成double變數的中間變數

stack<

char

> opt;

//符號棧

stack<

double

> item;

//數字棧

主要功能函式
將字元陣列轉化成數字double str2double(char s)

這個函式一般是將temp中儲存的字元陣列形式的數字轉化成double型別,考慮了小數點

double

str2double

(char s)

sum1 = sum1 *

10+ s[i]

-'0';}

if(flag)

}return sum1 + sum2;

}

運算子優先順序比較函式int priority(char ch)
int

priority

(char ch)

計算函式void cal()
void

cal(

) item.

push

(y);

opt.

pop();

}

主函式

int

main()

// 如果為數字或者小數點

else

if(s[i]

<=

'9'&& s[i]

>=

'0'|| s[i]

=='.'

)// 如果為計算符號

else

}// 這種情況,是裡面的優先順序計算順序已經調整好,直接進行計算

while

(!opt.

empty()

)cal()

;printf

("%.2lf\n"

, item.

top())

;return0;

}

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1000

;char s[maxn]

, temp[maxn]

;stack<

char

> opt;

//符號棧

stack<

double

> item;

//數字棧

double

str2double

(char s)

sum1 = sum1 *

10+ s[i]

-'0';}

if(flag)

}return sum1 + sum2;

}int

priority

(char ch)

void

cal(

) item.

push

(y);

opt.

pop();

}int

main()

// 如果為數字或者小數點

else

if(s[i]

<=

'9'&& s[i]

>=

'0'|| s[i]

=='.'

)// 如果為計算符號

else

}// 這種情況,是裡面的優先順序計算順序已經調整好,直接進行計算

while

(!opt.

empty()

)cal()

;printf

("%.2lf\n"

, item.

top())

;return0;

}

四則運算表示式求值

03 四則運算表示式求值 輸入輸入為四則運算表示式,僅由陣列 四則運算符 左右括號組成,不含空格。假設運算子結果都是整數。輸出輸出這個表示式的值 分析首先我們要搞清楚表示式的定義是什麼 表示式 由乙個或者多個項組成,多個項的表示式由 連線 項 由乙個或者多個因子組成,多個因子由 連線 因子 由 表示...

四則運算表示式求值

表示式求值是關於棧的應用,涉及到中綴與字尾式的轉換,本文關於10以內不帶括號的四則運算。9 3 4 x 3 24 1 x 9 5 9 9 5 x 9 4 6 2 x 3 1 42 思路 遇到數字直接入數字棧。遇到運算子,第乙個運算子直接入符號棧,後面的需要與符號棧棧頂元素比較優先順序。若當前優先順序...

百練 四則運算表示式求值

總時間限制 1000ms 記憶體限制 65536kb 描述 求乙個可以帶括號的小學算術四則運算表示式的值 輸入一行,乙個四則運算表示式。表示乘法,表示除法 輸出一行,該表示式的值,保留小數點後面兩位 樣例輸入 輸入樣例1 3.4輸入樣例2 7 8.3 輸入樣例3 3 4.5 7 2 3 3 4 2 ...