您的位置:首页 > 其它

UVA 1586 分子量(Molar Mass)

2017-08-01 11:09 393 查看
大致题意:给出一种物质的分子式(不带括号),求分子量。这题中的分子式只含有4种原子,分别为C、O、H、N,原子量分别为12.01、16.00、1.008、14.01(单位:g/mol)。

Sample Input

4

C

C6H5OH

NH2CH2COOH

C12H22O11

Sample Output

12.010

94.108

75.070

342.296

整体思路:就是判断哪个是字母,字母之后紧跟有几个数字(0或1或2),然后逐个判断后进行操作即可。

#include<stdio h="">
#include<string h="">
#include<ctype h="">

double ch(char mol)
{
switch(mol){
case 'C':return 12.01;
case 'H':return 1.008;
case 'O':return 16.00;
case 'N':return 14.01;
}
return 0.0;
}

int main()
{
int npos,leap,len,T;
double sum=0.0,summ=0.0;
char str[105];
scanf("%d",&T);
getchar();
while(T--){
leap=0;npos=0;sum=0,summ=0;
gets(str);
len=strlen(str);
while(npos<len){
if(ch(str[npos])!=0.0){   //判断这个字符是不是字母 (是)
if(isdigit(str[npos+1])){	// 判断字母后面是不是数字 (是)
sum+=ch(str[npos])*(str[++npos]-'0');
leap=1;	  //当这个字符串的此部分是字符+一个数字时 leap=1
}
else
sum+=ch(str[npos]);   //如果字符后面不是数字 比如OH时,执行此步
}

if(leap==1 && isdigit(str[npos+1])){  // 说明此部分是一个字母加两个数字
sum=sum*10+ch(str[npos-1])*(str[++npos]-'0');
}
npos++;
leap=0;
summ+=sum;
sum=0;
}
printf("%.3lf\n",summ);
}return 0;
}

</ctype></string></stdio>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: