给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol),输入t个分子式,输出分子量,保留三位小数。
输入:
4
C
C6H5OH
NH2CH2COOH
C12H22O11
输出:
12.010
94.108
75.070
342.296
代码:
#include<stdio.h>
#include<ctype.h>
char s[110];
const double d[] = {0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00};
int main() {
int t;
scanf("%d", &t);
while(t--) {
double sum = 0;
int i, n;
scanf("%s", s);
char x = s[0];
for(i = 0; s[i] != '\0'; ++i) {
if(isalpha(s[i])) {//如果是字母
x = s[i];//将s中的字母赋值给x
sum += d[x-'A'];//sum加上d[]中相应位置上的原子量
}
else {//是数字
n = s[i]-'0';//将数字赋值给n
if(isdigit(s[i+1])) {//s下一个也是数字
n = n*10 + (s[i+1]-'0');
i++;
}//一直到不是数字为止
sum += d[x-'A']*(n-1);//x在if已经被赋值,-1是因为if里加了一个
}
}
printf("%.3f\n", sum);
}
return 0;
}