#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char s[100];
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",&s);
double elem,sum=0;
int count=0,i,power=0;
bool single=true;
for(i=strlen(s)-1;i>=0;i--)
{
if(s[i]>='0'&&s[i]<='9'){count+=(int)pow(10,power++)*(s[i]-'0');single=false;}
else
{
power=0;
if(s[i]=='C')elem=12.01;
if(s[i]=='H')elem=1.008;
if(s[i]=='O')elem=16.00;
if(s[i]=='N')elem=14.01;
sum+=single?elem:elem*(double)count;
count=0;
single=true;
}
}
printf("%.3lf\n",sum);
}
return 0;
}
倒着遍历字符串,有两种情况,一种是元素后面有原子数得,另一种是没有原子数得,用一个bool值区分,统计数用加上pow求10得幂
314

被折叠的 条评论
为什么被折叠?



