鬱悶的C小加(三) 幾許情愁

2021-08-19 23:49:13 字數 1438 閱讀 4950

聰明的你幫助

c小加解決了中綴表示式到字尾表示式的轉換(詳情請參考「鬱悶的c小加(一)」),

c小加很高興。但

c小加是個愛思考的人,他又想通過這種方法計算乙個表示式的值。即先把表示式轉換為字首和字尾表示式,再求值。這時又要考慮運算元是小數和多位數的情況。

第一行輸入乙個整數t,共有t組測試資料(t<10)。

每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式,每個表示式都是以「=」結束。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數並且小於1000000。

資料保證除數不會為0。

對於每組測試資料輸出結果包括三行,先輸出轉換後的字首和字尾表示式,再輸出計算結果,結果保留兩位小數。

複製

2

1+2=

(19+21)*3-4/5=

+ 1 2 =

1 2 + =

3.00

- * + 19 21 3 / 4 5 =

19 21 + 3 * 4 5 / - =

119.20

#include#include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

#define ll long long

using namespace std;

int ju(char c)//定義運算子優先順序

}void com(stack& num,stack& ch)//計算表示式

ch.pop();

}int main()

}ch.pop();

ch.push('#');

for(i=0; i=0; i--)//轉換為字首表示式

p.push(' ');

i++;

}else if(s[i]==')')

ch.push(s[i]);

else if(s[i]=='(')

ch.pop();

}else if(ch.empty()||ju(s[i])>=ju(ch.top()))

ch.push(s[i]);

else

ch.push(s[i]);}}

while(!ch.empty())

p.pop();

while(!p.empty())

printf("%c",p.top());

p.pop();

}printf(" =\n");

while(q.front()!='#')

printf("=\n");

printf("%.2lf\n",num.top());

}}

鬱悶的C小加(一)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 我們熟悉的表示式如a b a b c d 等都屬於中綴表示式。中綴表示式就是 對於雙目運算子來說 操作符在兩個運算元中間 num1 operand num2。同理,字尾表示式就是操作符在兩個運算元之後 num1 num2 ope...

鬱悶的C小加(一)

我們熟悉的表示式如 a b a b c d 等都屬於中綴表示式。中綴表示式就是 對於雙目運算子來說 操作符在兩個運算元中間 num1 operand num2 同理,字尾表示式就是操作符在兩個運算元之後 num1 num2 operand acm 隊的 c 小加 正在鬱悶怎樣把乙個中綴表示式轉換為字...

鬱悶的C小加(三) nyoj 409

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 聰明的你幫助 c小加解決了中綴表示式到字尾表示式的轉換 詳情請參考 鬱悶的c小加 一 c小加很高興。但 c小加是個愛思考的人,他又想通過這種方法計算乙個表示式的值。即先把表示式轉換為字首和字尾表示式,再求值。這時又要考慮運算元是...