時間限制:
3000 ms | 記憶體限制:
65535 kb
難度: 4
描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a+b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。
比如輸入:「1+2/4=」,程式就輸出1.50(結果保留兩位小數)
輸入第一行輸入乙個整數n,共有n組測試資料(n<10)。
每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式,每個表示式都是以「=」結束。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。
資料保證除數不會為0
輸出每組都輸出該組表示式的運算結果,輸出結果保留兩位小數。
樣例輸入
21.000+2/4=
((1+2)*5+1)/4=
樣例輸出
1.504.00
解題思路:此題主要利用的是資料結構中棧的壓入與彈出,把運算子和資料分別壓入不同的棧中進行相應的操作,具體思路請看**詳解。
具體**:
#include #include #include #include #include using namespace std;
stackosta;//定義乙個char型別的字元棧
stackdsta;//定義乙個double型別的資料棧
int main()
else
v=v*10+s[i]-'0';
i++;
}i--;
if(k==1)
dsta.push(v/pow(10,i-b));
else
dsta.push(v);
}else if(s[i]=='+'||s[i]=='-')
dsta.push(c);
osta.pop();
}osta.push(s[i]);
}else if(s[i]=='*'||s[i]=='/')
else if(osta.top()=='/')
osta.push(s[i]);
}else if(s[i]==')')
dsta.push(c);
osta.pop();
}osta.pop();
}} printf("%.2lf\n",dsta.top());
dsta.pop();//彈出最後資料,以免影響下一次運算
} return 0;
}
NYOJ 35 表示式求值(棧)
表示式求值 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩...
NYOJ35 表示式求值
搞了差不多2天,原來乙個是sstream的用法困惑好久,需要對陣列清零 include include include include include include includeusing namespace std char mid 1008 post 1008 char compare ch...
nyoj 35 表示式求值
描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩位小數 輸入 第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只...