• UVa 1586 Molar mass --- 水题


      UVa 1586

      题目大意:给出一种物质的分子式(不带括号),求分子量。本题中分子式只包含4种原子,分别为C、H、O、N,

           原子量分别为12.01,1.008,16.00,14.01

      解题思路:先实现一个从字符型的数到整型的数的转换函数,再将输入的串从头到尾扫描,遇到字母,则进一步扫描后面的数字的区间,

           再调用函数进行转换,再乘以其的原子质量,最后累加到sum中即可。

    /* UVa 1586 Molar mass --- 水题 */
    #include <cstdio>
    #include <cstring>
    #include <ctype.h>
    #include <map>
    using namespace std;
    
    char s[100];
    map<char, double> m;
    
    /*
        @function:将区间[p, q)的数字转换成整型的数并返回
        @param:左闭右开区间[p,q)
        @return:返回转换的结果
    */
    int fun(char* p, char* q){
        //说明传进来
        if (p >= q){
            return 1;
        }
        int num = 0, term = 1;
        
        while (p < q){
            num = num*10 + (*p-'0');
            ++p;
        }//while(p q)
        
        return num;
    }
    
    int main()
    {
    #ifdef _LOCAL
        freopen("D:\input.txt", "r", stdin);
    #endif
    
        //定义相应字母的映射值
        m['C'] = 12.01;
        m['H'] = 1.008;
        m['O'] = 16.00;
        m['N'] = 14.01;
        int t;
        scanf("%d", &t);
        while (t--){
            scanf("%s", s);
            int i = 0;
            double sum = 0.0;
            while (s[i] != 0){
                //i处是字母
                if (isalpha(s[i])){
                    
                    int j = i + 1;    //j指向下一位
                    while (isdigit(s[j])){
                        ++j;
                    }//j一直+1直到j指向字母
    
                    //两个字母之间即为数据 [i+1, j)区间即表示数字
                    //注意也有可能字母之后立即跟上字母,此时i+1 = j, 因此函数需要返回1
                    int t = fun(s + i + 1, s + j);
                    sum += t*m[s[i]];
                    i = j;
                }
            }//s[i]
            printf("%.3f
    ", sum);
        }
    
    
        return 0;
    }
    View Code
  • 相关阅读:
    爬取药智网中的方剂信息
    日报3.13
    数据库添加出错
    Bencode
    一些安全网络协议
    代码质量不重要
    Jordan Peterson
    随身记录的缺点
    Why is Go PANICking?
    go问
  • 原文地址:https://www.cnblogs.com/tommychok/p/5343050.html
Copyright © 2020-2023  润新知