HDU 1237 簡單計算器(stack)
Problem Description
讀入一個只包含 +, -, *, / 的非負整數計算表達式,計算該表達式的值。
Input
測試輸入包含若干測試用例,每個測試用例占一行,每行不超過200個字符,整數和運算符之間用一個空格分隔。沒有非法表達式。當一行中只有0時輸入結束,相應的結果不要輸出。
Output
對每個測試用例輸出1行,即該表達式的值,精確到小數點後2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
Source
浙大計算機研究生復試上機考試-2006年
Recommend
JGShining | We have carefully selected several similar problems for you: 1230 1235 1234 1236 1229
這個題困擾我幾天了,看了別人的博客,這個方法太厲害了,居然不保存 字符數組
#include
#include
#include
#include
#include
#include
#include
#include
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)
#define eps 1e-8
using namespace std;
#define N 10005
int main()
{
int i;
char c,cc;
double a,b;
while(~scanf("%lf%c",&a,&c))
{
if(fabs(a-0)q;
q.push(a);
scanf("%c%lf",&c,&a);
if(c=='+')
q.push(a);
else
if(c=='-')
q.push(a*(-1));
else
{
double cur=q.top();
q.pop();
if(c=='*')
q.push(cur*a);
else
q.push(cur/a);
}
while(scanf("%c",&c))
{
if(c=='\n') break;
scanf("%c%lf",&c,&a) ;
if(c=='+')
q.push(a);
else
if(c=='-')
q.push(a*(-1));
else
{
double cur=q.top();
q.pop();
if(c=='*')
q.push(cur*a);
else
q.push(cur/a);
}
}
double ans=0;
while(!q.empty())
{
ans+=q.top();
q.pop();
}
printf("%.2lf\n",ans);
}
return 0;
}