UVa 1586

来源:互联网 发布:51单片机控制马达 编辑:程序博客网 时间:2024/05/08 06:13

代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define max 1000
char  sub[100][100];
int main()
{
    char s[max];
    int T;
    scanf("%d", &T);
    while (T--)
    {
        scanf("%s", s);
        memset(sub,0,sizeof(sub));
        double sum = 0.0;
        int length = strlen(s);
        int j = 0,k = 0;
        int flag = 0;   //遇到一个字母后跟两个数字或更多数字时,下标j只减一次
        for (int i = 0; i < length; i++)
        {
            if (isupper(s[i]))
            {
                k = 0;
                sub[j++][k] = s[i];
                flag = 0;
            }    
            else
            {
                if (flag == 0)
                {
                    j--;
                    flag = 1;
                }
                k++;
                sub[j][k] = s[i];
                if (isupper(s[i + 1]))
                    j++;
            }
        }
        for (int i = 0; i <= j; i++)
        {
            int k = 1;
            int num = 0;
            while (sub[i][k])
            {
                num *= 10;
                num += sub[i][k] - '0';
                k++;
            }
            if (num != 0)
            {

                if (sub[i][0] == 'C')
                {
                    sum += 12.01 * num;
                }
                else if (sub[i][0] == 'H')
                {
                    sum += 1.008 * num;
                }
                else if (sub[i][0] == 'O')
                {
                    sum += 16.00 * num;
                }
                else if (sub[i][0] == 'N')
                {
                    sum += 14.01 * num;
                }
            }
            else
            {
                if (sub[i][0] == 'C')
                {
                    sum += 12.01 ;
                }
                else if (sub[i][0] == 'H')
                {
                    sum += 1.008 ;
                }
                else if (sub[i][0] == 'O')
                {
                    sum += 16.00 ;
                }
                else if (sub[i][0] == 'N')
                {
                    sum += 14.01 ;
                }
            }
        }
        printf("%.3f\n", sum);

    }
    return 0;
}


0 0
原创粉丝点击