1. 程式人生 > >UVa 1586

UVa 1586

程式碼:
#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;
}