题目
- 详细题目
- 简略题目
- 给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4中原子,分别为C,H,O,N,原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol.
-
思路
- 类比《算法竞赛入门经典》第三章前边所讲的,每输入一个字母,其对应输出一个数字,如果用if语句比较麻烦,可以事先定义一个常量数组。
- 分析分子式可得,一共有三种形式。
- 字母后没有数字 isalpha()判断其是否为大写字母(需要ctype.h支持)
- 字母后是一位数字
- 字母后是两位数字
代码
#include<stdio.h>
#include<ctype.h>
#define maxn 20
double mass[]={0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00,0,0,0,0,0,0,0,0,0,0,0};
int main(){
int T;
char s[maxn];
scanf("%d",&T);
while(T--){
scanf("%s",s);
int i,index,num;
double sum=0; //sum是double类型的
for(i=0;s[i]!='\0';i++){
if(isalpha(s[i])){ //这个方法需要 #include<ctype.h>
index=s[i]-'A';
sum+=mass[index];
}else{
num=s[i]-'0';
if(s[i+1]>='0'&&s[i+1]<='9'){ //之前写的是!isalpha(s[i]),但是不能通过?
num=num*10+s[i+1]-'0';
i++;
}
sum+=(num-1)*mass[index];
}
}
printf("%.3f\n",sum); //不要忘记换行
}
return 0;
}