天天看點

分子量(Molar Mass,ACM/ICPC Seoul 2007,UVa1586)

#include <cstdio>
#include <cstring>
#include <cctype>
#define maxn 85
char s[maxn];
double d[]={0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00};
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%s",s);
        int n=strlen(s);
        double ans=0;
        for(int i=0;i<n;i++){
            if(isalpha(s[i])) ans+=d[s[i]-'A'];
            if(isdigit(s[i])){
                int sum=0;
                if(isdigit(s[i+1])) sum+=(s[i]-'0')*10+(s[i+1]-'0');
                else sum+=s[i]-'0';
                ans+=d[s[i-1]-'A']*(sum-1);
            }
        }
        printf("%.3f\n",ans);
    }
    return 0;
}