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

 解题思路:

1.将分子量用double 数组记录下来

2.将字符串存储在字符数组中,从头向后扫描,一直记住“字母”,对下一个字符进行判断,是否是数字,如果是数字:用一个整数记录,本代码中用的sum,同时下标++。

  进行判断,查看是否对数字进行了记录,即查看sum是否进入了while循环并被赋值,如果没有被赋值,说明下一个字符不是数字,直接对W(总记录)值进行赋值,为当前字符的权值(分子量),即double数组的中的值。如果被赋值,说明字符后面是一个数字,sum中存放了该“数字”,也是对w赋值,不过此时是赋sum倍的当前字符的权值(分子量)。

3.最后整个字符串循环完毕,输出总记录W即可。

#include <stdio.h>
int main(void)
{
    double darr[200];
    int n,sum,p;
    double w;
    char c,carr[1000];
    darr['C']=12.01;
    darr['H']=1.008;
    darr['O']=16.00;
    darr['N']=14.01;
    scanf("%d",&n);
    while(n--)
    {
        p=0;
        w=0;
        scanf("%s",carr);
        while(carr[p]!='')
        {
            sum=0;
            c=carr[p];
            p++;
            while(carr[p]>='0' && carr[p]<='9')
            {
                sum=sum*10+carr[p]-'0';
                p++;
            }
            if(sum)
                w=w+sum*(darr[c]);
            else
                w+=(darr[c]);
        }
        printf("%.3f
",w);
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/A--Q/p/5700949.html