#include<bits/stdc++.h>
using namespace std;
map<string,float> Ar;
void init()
{
Ar["H"]=1;
Ar["C"]=12;
Ar["N"]=14;
Ar["O"]=16;
Ar["F"]=19;
Ar["Na"]=23;
Ar["Mg"]=24;
Ar["Al"]=27;
Ar["Si"]=28;
Ar["P"]=31;
Ar["S"]=32;
Ar["Cl"]=35.5;
Ar["K"]=39;
Ar["Ca"]=40;
Ar["Mn"]=55;
Ar["Fe"]=56;
Ar["Cu"]=64;
Ar["Zn"]=65;
Ar["Ag"]=108;
Ar["I"]=127;
Ar["Ba"]=137;
Ar["Hf"]=178.5;
Ar["Pt"]=195;
Ar["Au"]=197;
Ar["Hg"]=201;
}
char ch[101];
int cs(int &i)
{
int x=0;
for(;ch[i]>='0' && ch[i]<='9';i++)
{
x=x*10+(ch[i]-'0');
}
return x;
}
float js(int &i)
{
float s=0;
float k=0;
// if(ch[i]>='A' && ch[i]<='Z')
// {
if(ch[i+1]>='a' && ch[i+1]<='z')
{
char ys[3];
ys[0]=ch[i];
ys[1]=ch[i+1];
k=Ar[ys];
i+=2;
}
else
{
char ys[2];
ys[0]=ch[i];
k=Ar[ys];
i++;
}
// }
if(ch[i]=='_')
{
i+=2;
s+=k*cs(i);
}
else
{
s+=k;
i--;
}
return s;
}
int main()
{
init();
scanf("%s",ch);
int l=strlen(ch);
float ans=0;
int r=l-1;
for(int j=0;j<l;j++)
{
if(ch[j]=='~')
{
r=j-1;
break;
}
}
if(r!=l-1)
{
if(ch[r+2]=='H')
{
ans+=18;
}
else
{
r+=2;
ans+=18*cs(r);
r-=2;
}
}
int i;
for(i=0;i<=r;i++)
{
if(ch[i]>='A' && ch[i]<='Z')
{
ans+=js(i);
}
if(ch[i]=='(')
{
i++;
float k;
for(k=0;ch[i]!=')';i++)
{
k+=js(i);
if(ch[i+1]=='_')
{
i+=3;
ans+=k*cs(i);
}
else
{
ans+=k;
}
}
}
}
int int_ans=ans;
if(int_ans==ans)
{
printf("%d\n",int_ans);
}
else
{
printf("%.1f\n",ans);
}
return 0;
}
评测记录