#include <iostream>
#include <cstdlib>
#include <string>
#include <cstdio>
using namespace std;
int main(void)
{
int T=0;
cin>>T;//读入T组数据
while(T--)
{
string s,n;
cin>>s;//读入化学分子式字符串
char c='@';//c记录每次读到的字符,初始化为一个用不到的@字符
double value=0.0,value2=0.0,sum=0.0;
int length = s.size();
for(int i=0;i<length;i++)
{
if(s[i]>='A')
{
if('C'==s[i])
value=12.01;
else if('H'==s[i])
value=1.008;
else if('O'==s[i])
value=16.00;
else
value=14.01;
if('@'!=c)//如果读取到一个新的元素值,说明上一个元素已经完毕,计算上一个元素的摩尔质量
{
if(s[i-1]>='A')
sum+=value2;
else
sum+=atoi(n.c_str())*value2;
n.clear();
}
c=s[i];
value2=value;//记录上一次value的值
}
else
{
n+=s[i];
}
//因为上面的计算会漏算最后一个元素的摩尔质量,所以这里需要加上
if(i==length-1)
{
if(s[i]>='A')
sum+=value2;
else
sum+=atoi(n.c_str())*value2;
}
}
printf("%.3lf\n",sum);
}
return 0;
}
Uva1586
最新推荐文章于 2022-01-24 22:45:37 发布