题目链接:
https://cn.vjudge.net/problem/UVA-1586
Sample Input
4
C
C6H5OH
NH2CH2COOH
C12H22O11
Sample Output
12.010
94.108
75.070
342.296
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
char A[81];
double sum;
double res(char A)
{
if(A=='C') return 12.01;
if(A=='H') return 1.008;
if(A=='O') return 16.00;
if(A=='N') return 14.01;
}
int main()
{
int T;
cin>>T;
while(T--)
{
sum=0.000;
scanf("%s",A);
int len=strlen(A);
for(int i=0; i<len; i++)
{
if((isalpha(A[i])&&isalpha(A[i+1]))||(isalpha(A[i])&&i==len-1))
{
sum+=res(A[i]);
}
else if(isalpha(A[i])&&isdigit(A[i+1]))
{
int cnt=0, j=i+1;
for(; j<len&&isdigit(A[j]); j++)
{
cnt=cnt*10+A[j]-'0';
}
sum+=res(A[i])*cnt;
}
else if(isdigit(A[i])) continue;
/*cout<<sum<<endl;*/
}
printf("%.3lf\n",sum);
}
return 0;
}