原题
附代码:
#include<stdio.h>
#include<string.h>
#define MAX 81
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char s[MAX];
double ss[] = {0, 0, 12.01, 0, 0, 0, 0, 1.008, 0, 0, 0, 0, 0, 14.01, 16.00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /*打表,将所有英文字母的值都设为0,将特定的设为其分子量*/
scanf("%s",s);
double sum = 0;
int digit = 0, last;
int i, j;
for(i = 0; i < strlen(s); i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
{
last = s[i] - 'A'; /*找到其位置*/
sum += ss[last]; /*有,就加上其对应得分子量*/
}
else
{
digit = s[i] - '0';
if(i + 1 < strlen(s) && s[i+1] >= '0' && s[i+1] <= '9') /*判断下一个是否仍是数字*/
{
digit = digit * 10 + s[i+1] - '0';
i++;
}
sum += (digit-1)*ss[last]; /*因为前面那个已经加过一个了,所以减1*/
}
}
printf("%.3lf\n",sum);
}
}