UVa1586 - Molar mass 题解
题目
题目链接
题目大意
给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C,H,O,N原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。
样例输入
4
C
C6H5OH
NH2CH2COOH
C12H22O11
样例输出
12.010
94.108
75.070
342.296
题解
程序主要的部分应该为判断当前字符为原子还是数字,如果为原子,那么就把上个原子分子量算出来,加到总分子量中;如果是数字,那么就累加这个原子的数目。
语言不太好解释,来看程序吧。
Then show the code.
#include <stdio.h>
#include <string.h>
int main(){
int T;
scanf("%d", &T);
char mf[100];
while(T--){
memset(mf, 0, sizeof(mf));
scanf("%s", mf);
int len;
//y存储当前原子的原子量 x存储有几个当前原子
double x, y, sum;
len = strlen(mf);
sum = x = y =0.0;
for(int i=0; i<len; i++){
if(mf[i] < 'Z' && mf[i] > 'A'){
//如果x=0说明只有1个原子 x!=0说明有好多原子
if(x)
sum = sum + x*y;
else
sum = sum + y;
x = 0.0;
switch(mf[i]){
case 'C': y = 12.01; break;
case 'H': y = 1.008; break;
case 'O': y = 16.00; break;
case 'N': y = 14.01; break;
}
}else if(mf[i] <= '9' && mf[i] > '0'){
//更新当前原子数目
x = x*10.0 + (mf[i]-'0');
}
}
//记得把最后原子的分子量加到总分子量中
if(x)
sum = sum + x*y;
else
sum = sum + y;
printf("%.3lf\n", sum);
}
return 0;
}
不忘初心方得始终