UVa1586 - Molar mass 题解

题目

题目链接

UVa1586 - Molar mass

题目大意

给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C,H,O,N原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。

样例输入

4
C
C6H5OH
NH2CH2COOH
C12H22O11

样例输出

12.010
94.108
75.070
342.296

题解

程序主要的部分应该为判断当前字符为原子还是数字,如果为原子,那么就把上个原子分子量算出来,加到总分子量中;如果是数字,那么就累加这个原子的数目。
语言不太好解释,来看程序吧。
Then show the code.

#include <stdio.h>
#include <string.h>

int main(){
    int T;
    scanf("%d", &T);
    char mf[100];
    while(T--){
        memset(mf, 0, sizeof(mf));
        scanf("%s", mf);
        int len;
        //y存储当前原子的原子量 x存储有几个当前原子
        double x, y, sum;
        len = strlen(mf);
        sum = x = y =0.0;
        for(int i=0; i<len; i++){
            if(mf[i] < 'Z' && mf[i] > 'A'){
                //如果x=0说明只有1个原子 x!=0说明有好多原子
                if(x)
                    sum = sum + x*y;
                else
                    sum = sum + y;
                x = 0.0;
                switch(mf[i]){
                    case 'C': y = 12.01; break;
                    case 'H': y = 1.008; break;
                    case 'O': y = 16.00; break;
                    case 'N': y = 14.01; break;
                }
            }else if(mf[i] <= '9' && mf[i] > '0'){
                //更新当前原子数目
                x = x*10.0 + (mf[i]-'0');
            }
        }
        //记得把最后原子的分子量加到总分子量中
        if(x)
            sum = sum + x*y;
        else
            sum = sum + y;
        printf("%.3lf\n", sum); 
    }
    return 0;
}
posted @ 2020-11-02 22:47  1v7w  阅读(136)  评论(0编辑  收藏  举报