最近在看刘汝佳编写的紫皮算法书,第三章后面有个习题,尝试写了一下,总感觉能找到更加便利的解题方法,但能力有限没想到。
上网搜索了一下,也没找到能让我眼前一亮的方法,那就暂且把我写的shi山放出来让大伙看看,希望大伙提提建议优化一下,小弟感激不尽。
题目:分子量(Molar Mass,ACM/ICPC SEOUL 2007,UVa1586)
给出一种物质的分子式(不带括号),求分子量。 本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。 例如,C6H5OH的分子量为94.108g/mol。
解题思路:
读入字符串后先判断是否为字母,若是,则更新原子量,再判断字母后是否是数字,若是就乘该数字转化后的整型,若否则乘一。定义浮点量sum存储结果。
代码如下:
#include<stdio.h>
#include<string.h>
int main(){
char s[9];
double sum=0;
gets(s);
for(int i=0;i<(strlen(s));i++){
double temp=0;
if(s[i]>='A'){
switch (s[i]){
case'C':
temp=12.01;
break;
case'H':
temp=1.008;
break;
case'O':
temp=16.00;
break;
case'N':
temp=14.01;
break;
}
if(i<strlen(s)-1){
if(s[i+1]<'A'){
sum+=temp*(double)(s[i+1]-'0');
}
else{
sum+=temp;
}
}
else{
sum+=temp;
}
}
else{
continue;
}
}
printf("%lf",sum);
}