欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分子式

程序员文章站 2022-07-12 14:09:23
...
分子式
Time Limit: 1000 ms   Memory Limit: 50 MB
Judge By Case
Description
给出一种物质的得分子式(不带括号), 求分子量。本题中的分子式只包含4种原子,分别为C,H,O,N,原子的量分别为12.01,1.008,16.00,14.01。例如,C6H5OH的分子的量为94.108。

Input
4
C
C6H5OH
NH2CH2COOH
C12H22O11

Output
12.010
94.108
75.070
342.296

分析:用字符串存储分子式,然后顺序遍历该字符串。问题主要是如何求得每个原子的个数,当位数没有越界并且该位为数字时,我用一个临时变量存储起来,之后与该原子的摩尔质量相乘就可以了。
#include <bits/stdc++.h>
using namespace std;
double f(char a)
{
    switch(a)
    {
        case 'C':return 12.01;
        case 'H':return 1.008;
        case 'O':return 16.00;
        case 'N':return 14.01;
    }
}
using namespace std;
int main()
{
    char b;
    string a;
    int n;
    cin>>n;
    while(n--){
    cin>>a;
    double sum=0;
    for(int i=0;i<a.length();i++){
        int c=0;
        if(isalpha(a[i])) b=a[i];
        while(i+1<a.length()&&isdigit(a[i+1])){
            c=c*10+a[i+1]-'0';
            i++;
        }
        if(c==0) c=1;
        sum+=f(b)*c;
    }
    cout<<sum<<"g/mol"<<endl;
    }
    return 0;
}