聰明的你幫助
c小加解決了中綴表示式到字尾表示式的轉換(詳情請參考「鬱悶的c小加(一)」),
c小加很高興。但
c小加是個愛思考的人,他又想通過這種方法計算乙個表示式的值。即先把表示式轉換為字首和字尾表示式,再求值。這時又要考慮運算元是小數和多位數的情況。
第一行輸入乙個整數t,共有t組測試資料(t<10)。每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式,每個表示式都是以「=」結束。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數並且小於1000000。
資料保證除數不會為0。
對於每組測試資料輸出結果包括三行,先輸出轉換後的字首和字尾表示式,再輸出計算結果,結果保留兩位小數。
複製
21+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小加是個愛思考的人,他又想通過這種方法計算乙個表示式的值。即先把表示式轉換為字首和字尾表示式,再求值。這時又要考慮運算元是...