分子式
程序员文章站
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
C
C6H5OH
NH2CH2COOH
C12H22O11
Output
12.010
94.108
75.070
342.296
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;
}
上一篇: 伴随矩阵 和 余子式, 行列式的关系
下一篇: arcgis标注分子式及假分子式