UVa 1586 Molar mass

1586 - Molar mass

要解决的问题

  • 如何将字母与它代表的数字对应?

    只有4个字母,枚举,用if else。

    python的话可以用字典。c++应该没有字典。

  • 字符转换为数组

    单个数字字符转换为数字,直接-‘0’,ascii中数字是连续的。

  • 判断是数字还是字母

    只有4个字母,直接if。

mycode

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

//判断是不是字母
int isAlp(char ch) 
{
    if (ch == 'C') return 1;
    if (ch == 'H') return 1;
    if (ch == 'O') return 1;
    if (ch == 'N') return 1;
    return 0;
}

//单个数字字符转换为数字
int ch2num(char ch)
{
    return ch - '0';
}

int main()
{
    int T;
    scanf("%d", &T);
    for (int i = 0; i < T; i++)
    {
        char s[81];
        scanf("%s", s);
        int len = strlen(s);
        float mass = 0;
        for (int j = 0; j < len; j++)
        {
            if (s[j] == 'C')//逐个判断
            {
                if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))//两位数
                {
                    mass += 12.01 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));

                }
                else if (j + 1 < len && !isAlp(s[j + 1]))//一位数
                    mass += 12.01 * ch2num(s[j + 1]);
                else
                    mass += 12.01;
            }

            if (s[j] == 'H')
            {
                if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
                    mass += 1.008 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
                else if (j + 1 < len && !isAlp(s[j + 1]))
                    mass += 1.008 * ch2num(s[j + 1]);
                else
                    mass += 1.008;
            }

            if (s[j] == 'O')
            {
                if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
                    mass += 16.00 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
                else if (j + 1 < len && !isAlp(s[j + 1]))
                    mass += 16.00 * ch2num(s[j + 1]);
                else
                    mass += 16.00;
            }

            if (s[j] == 'N')
            {
                if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
                    mass += 14.01 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
                else if (j + 1 < len && !isAlp(s[j + 1]))
                    mass += 14.01 * ch2num(s[j + 1]);
                else
                    mass += 14.01;
            }

        }
        printf("%.3f\n", mass);
    }
    return 0;
}
posted @ 2017-02-27 22:46  ssh_alitheia  阅读(117)  评论(0编辑  收藏  举报