UVA-1586

UVA-1586

//#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<cstring>
#include<cctype>
int ans[512];
char s[1010];
int main()
{
    
    
    //freopen("input.txt", "r", stdin);
    int T; scanf("%d", &T);
    int tmp = 0; char elem = 0;
    while (T--) {
    
    
        memset(ans, 0, sizeof(ans));
        memset(s, 0, sizeof(ans));
        scanf("%s", s);
        int n = strlen(s);
        for (int i = 0; i < n; ++i) {
    
    
            if (isalpha(s[i])) {
    
    
                elem = s[i];
                if (isalpha(s[i + 1]) || s[i + 1] == '\0')   tmp = 1;
                else if (isdigit(s[i + 1])&& isdigit(s[i + 2])) {
    
    
                    tmp = (s[i + 1] - '0') * 10 + (s[i + 2] - '0');
                }
                else if (isdigit(s[i + 1])) {
    
    
                    tmp = s[i + 1] - '0';
                }
                ans[elem] += tmp; tmp = 0;
            }
        }
        double mess = ans['C'] * 12.01 + ans['H'] * 1.008 + ans['O'] * 16.00 + ans['N'] * 14.01;
        printf("%.3f\n", mess);
    }
    return 0;
}

//本题描述了字符和数字混合输入的情况
//用cin能够比较好的处理
//如果用scanf的话,可能需要进行一个转化
//用char elem记录在处理的元素,用char s[]表示输入的串;
//如果isalpha
    //如果下一个元素isalpha,那么tmp=1;
    //如果下两个元素isdigit,那么tmp=;
    //如果下一个元素isdigit,那么tmp=;
    //ans[elem]+=tmp;tmp=0;

猜你喜欢

转载自blog.csdn.net/u011917745/article/details/113752210