SCAU 8626 原子量计数

8626 原子量计数

时间限制:1000MS  内存限制:1000K 提交次数:0 通过次数:0

题型: 编程题   语言: 无限制

Description

给出一个化学原子式,仅含有C,H,O,N 四种元素,计算其总分子量。

例如,C6H5OH 的原子量为94.108g/mol,计算方法为:
6 × (12.01 g/mol) + 6 × (1.008 g/mol) +1 × (16.00 g/mol).

Input

输入的第一行是数字T,表示输入文件含有T个CASE。之后有T行,每行有一个长度小于100 的字符串,
表示要求的分子式。原子都用大写字母表示,没有括号,保证所有的式子都合法。

Output

输出每个式子的原子量。

Sample Input

4
C
C6H5OH
NH2CH2COOH
C12H22O11

Sample Output

12.010
94.108
75.070
342.296

Hint


Source

PKKJ @ 07 GIS 1

Provider

admin

#include<stdio.h>
#include<string.h>
double view(char w, int n)
{
    switch(w)
    {
        case 'C' : return 12.01*n;
        case 'H' : return 1.008*n;
        case 'O' : return 16.00*n;
        case 'N' : return 14.01*n;
        default : return 0;
    }
}

int main()
{
    char list[120], temp;
    int  n, T, i, j, len, count;
    double sum;
    scanf("%d", &T);
    while(T--)
    {
        memset(list, 0, sizeof(list));
        sum = 0;
        scanf("%s", list);
        len = strlen(list);
        for(i=0, count=1; i<len-1; i+=count, count=1)
        {
            if('A'<=list[i] && list[i]<='Z')
            {
                if('A'<=list[i+count] && list[i+count]<='Z') sum += view(list[i], 1);
                else 
                {
                    n = list[i+count++] - '0';
                    while(i+count<len && !('A'<=list[i+count] && list[i+count]<='Z'))
                    n = n*10 + (list[i+count++] - '0');
                    sum += view(list[i], n);
                    
                }
            }
            
        }
        if('A'<=list[i] && list[i]<='Z') sum += view(list[i], 1);
        printf("%.3lf\n", sum);
    }
}


解题报告:

1y,最主要的是对一个字符串的分析,注意出现的各种情况,在尾位的情况有三种情况(举例说): N4    NC    N11,根据各种情况进行分析编写

 

原文地址:https://www.cnblogs.com/liaoguifa/p/2774324.html