没什么好说的。。直接模拟。。
(:加深1层,
):降低1层
数字: 叶子
直接算就OK了。。
注意一下cin.peek()可能会有用,它的作用是读下一个但不删除,
可以用来判断是否是'(‘和’)’。。
#include<cstdio>
#include<utility>
#include<vector>
#include<algorithm>
#include<iostream>
#include<set>
#include<cstdlib>
using namespace std;
double pow[1000];
int main()
{
pow[0]=1;
for(int i=1;i<1000;i++)
pow[i]=pow[i-1]/2;
int cnt=0;double ans=0,x;
while(true)
{
while(cin.peek()==’ ‘)
cin.get();
if(cin.peek()=='(‘)
cnt++,cin.get();
else
{
if(cin.peek()==’)’)
cnt–,cin.get();
else
cin>>x,ans+=x*pow[cnt];
}
if(!cnt) break;
}
cout.setf(ios::fixed);
cout.precision(2);
cout<<ans<<endl;
}