式の解
3739 ワード
式の演算結果を計算する
C++アクセサリスタックオブジェクトを使用して実装
入力
最初の入力tは、t個のインスタンスがあることを示す
2行目から、各行に1つの式を入力し、各式の末尾に#を付けて終了を表します.
t行入力
しゅつりょく
行ごとに式の計算結果が出力され、計算結果は浮動小数点数(4桁の小数を含む)の形式で表されます.
coutで浮動小数点数出力の小数点数を制御するには、ライブラリファイルを追加し、fixed関数とsetprecision関数を使用します.コードは次のとおりです.
#include #include using namespace std;
int main()
{ double temp = 12.34
cout<
}
出力結果は12.3400
サンプル入力
2
1+2*3-4/5#
(66+(((11+22)*2-33)/3+6)*2)-45.6789#
サンプル出力
6.2000
54.3211
この問題は、2つのスタック(式スタック、デジタルスタック)で実現されます.
C++アクセサリスタックオブジェクトを使用して実装
入力
最初の入力tは、t個のインスタンスがあることを示す
2行目から、各行に1つの式を入力し、各式の末尾に#を付けて終了を表します.
t行入力
しゅつりょく
行ごとに式の計算結果が出力され、計算結果は浮動小数点数(4桁の小数を含む)の形式で表されます.
coutで浮動小数点数出力の小数点数を制御するには、ライブラリファイルを追加し、fixed関数とsetprecision関数を使用します.コードは次のとおりです.
#include #include using namespace std;
int main()
{ double temp = 12.34
cout<
}
出力結果は12.3400
サンプル入力
2
1+2*3-4/5#
(66+(((11+22)*2-33)/3+6)*2)-45.6789#
サンプル出力
6.2000
54.3211
この問題は、2つのスタック(式スタック、デジタルスタック)で実現されます.
#include
using namespace std;
// >....1
// <....2>
// >t;
while(t--)
{
temp=0;
flag=0;
start=0;
cin>>expression;
stack op_num;
stack op;
op.push('#');
len = expression.length();
for(i=0;i='0'&&ch<='9'||ch=='.')&&flag==0)
{
start=i-temp;
flag=1;
}
else if((ch'9')&&ch!='.')
{
if(ch=='(')
{
op.push(ch);
continue;
}
if(ch=='-'&&expression[i-1]=='(')
{
temp=1;
continue;
}
if(flag==1)
{
stringstream ss(expression.substr(start,i-start));
ss>>num;
op_num.push(num);
flag=0;
temp=0;
}
r_op=get_num(op.top());//
l_op=get_num(ch);//
if(priority[l_op][r_op]==1)
{
op.push(ch);
}
else if(priority[l_op][r_op]==2)
{
while(1)
{
b=op_num.top();
op_num.pop();
a=op_num.top();
op_num.pop();
type=op.top();
op.pop();
if(ch==')')
{
if(op.top()=='(')
{
op.pop();
//ch=')'
ch='#';
l_op=get_num(ch);
}
}
c=calculate(a,b,type);
op_num.push(c);
if(priority[l_op][get_num(op.top())]!=2)
break;
}
if(ch!=')'&&ch!='#')
op.push(ch);
}
else if(priority[l_op][r_op]==0)
{
while(op.top()!='#')
{
b=op_num.top();
op_num.pop();
a=op_num.top();
op_num.pop();
c=calculate(a,b,op.top());
op_num.push(c);
op.pop();
}
printf("%.4lf
",op_num.top());
op_num.pop();
op.pop();
}
}
}
}
return 0;
}