• 分子量(Molar Mass UVa1586)


    题目来自刘汝佳的《算法竞赛入门经典(第二版)》

    题目描述:

    我的代码:

    #include<iostream>
    #include<cstring>
    #include <iomanip>
    using namespace std;
    #define C 12.01
    #define H 1.008
    #define O 16.00
    #define N 14.01
    int main() 
    {
        int i, k;
        char enter[1000];
        cin >> k;
        while (k--)
        {        
            cin >> enter;
            double tot = 0.0;
            int num = 0, j;
            double ans = 0;
            for (i = 0; i < strlen(enter); i++) 
            {
                ans = 0;
                switch (enter[i])
                {
                case 'C':
                    num = 0;                    
                    if (enter[i + 1] <= '9' && enter[i + 1] >= '0')
                    {
                        i++;
                        while (enter[i] <= '9' && enter[i] >= '0')
                        {
                            if (num == 0)
                                num = i;
                            i++;
                        }
    
                        for (j = i; num < j; num++)
                            ans += ((double)(enter[num] - '0') * pow(10, j - num - 1));
    
                        tot += ans * C;
                        i--;
                    }
                    else
                        tot += C;
                    break;
                case 'H':
                    num = 0;
                    if (enter[i + 1] <= '9' && enter[i + 1] >= '0')
                    {
                        i++;
                        while (enter[i] <= '9' && enter[i] >= '0')
                        {
                            if (num == 0)
                                num = i;
                            i++;
                        }
    
                        for (j = i; num < j; num++)
                            ans += ((double)(enter[num] - '0') * pow(10, j - num - 1));
    
                        tot += ans * H;
                        i--;
                    }
                    else
                        tot += H;
                    break;
                case 'O':
                    num = 0;
                    if (enter[i + 1] <= '9' && enter[i + 1] >= '0')
                    {
                        i++;
                        while (enter[i] <= '9' && enter[i] >= '0')
                        {
                            if (num == 0)
                                num = i;
                            i++;
                        }
    
                        for (j = i; num < j; num++)
                            ans += ((double)(enter[num] - '0') * pow(10, j - num - 1));
    
                        tot += ans * O;
                        i--;
                    }
                    else
                        tot += O;
                    break;
                case 'N':
                    num = 0;
                    if (enter[i + 1] <= '9' && enter[i + 1] >= '0')
                    {
                        i++;
                        while (enter[i] <= '9' && enter[i] >= '0')
                        {
                            if (num == 0)
                                num = i;
                            i++;
                        }
    
                        for (j = i; num < j; num++)
                            ans += ((double)(enter[num] - '0') * pow(10, j - num - 1));
    
                        tot += ans * N;
                        i--;
                    }
                    else
                        tot += N;
                    break;
                }
            }
            cout << setiosflags(ios::fixed) << setprecision(3) << tot << "g/mol" << endl;
        }
        return 0;
    }

    Sample Input



    C6H5OH 
    NH2CH2COOH 
    C12H22O11 


    Sample Output

    12.010 
    94.108 
    75.070 
    342.296

    水题,但是有陷阱,所以特地放了上来╮(╯▽╰)╭,求大神们更好的代码~

  • 相关阅读:
    子信息传递多个参数
    Oracle q' 简化单引号转义
    HTML的target属性中_blank、_self、_parent、_top含义
    数据库设计之“有时不得不违背的第三范式”
    Jquery下的Ajax调试方法
    JQuery.Ajax之错误调试帮助信息
    定时删除数据-用JOB
    数据分析
    机器学习数学基础
    机器学习数学基础
  • 原文地址:https://www.cnblogs.com/Breathmint/p/7289994.html
Copyright © 2020-2023  润新知