题目链接 http://vjudge.net/problem/UVA-1586
#include<stdio.h>
#include<string.h>
#include<ctype.h>
double test(char c)
{
if(c=='C')
return 12.01;
else if(c=='H')
return 1.008;
else if(c=='O')
return 16.00;
else if(c=='N')
return 14.01;
}
int main()
{
int t;
scanf("%d",&t);
char s[90];
for(int i=0;i<t;i++)
{
memset(s,'\0',sizeof(s));
scanf("%s",s);
double score=0;
int ls=strlen(s);
int cur=0;
while(cur<ls)
{
if(cur!=ls-1&&isalpha(s[cur])&&isdigit(s[cur+1])) //如果当前字母的下一个字符为数字
{
int d=0; //保存数字大小
int w=0; //保存数字长度
for(int j=cur+1;isdigit(s[j])&&j<ls;j++) //计算数字长度
w++;
for(int j=1;j<=w;j++)
{
d*=10;
d+=(s[cur+j]-'0'); //计算数字大小
}
score+=(test(s[cur])*d);
cur+=(w+1); //更新cur
}
else //如果当前字母的下一个字母还为字母,则只计算当前字母
{
score+=test(s[cur]);
cur++;
}
}
printf("%.3lf\n",score);
}
return 0;
}