原子量计数
原子量计数
Description
给出一个化学原子式,仅含有C,H,O,N 四种元素,计算其总分子量。
例如,C6H5OH 的原子量为94.108g/mol,计算方法为: 6 × (12.01 g/mol) + 6 × (1.008 g/mol) +1 × (16.00 g/mol).
Input
输入的第一行是数字T,表示输入文件含有T个CASE。之后有T行,每行有一个长度小于100 的字符串, 表示要求的分子式。原子都用大写字母表示,没有括号,保证所有的式子都合法。
Output
输出每个式子的原子量。
Sample Input
4 C C6H5OH NH2CH2COOH C12H22O11
Sample Output
12.010 94.108 75.070 342.296
//以下是代码:
#include<stdio.h>
#include<string.h>
#define newnum 0
#define oldnum 1
int main()
{
float c,h,o,n,cnt;
int i,j,len,t;
int tc,th,to,tn;
char str[101];
scanf("%d",&t);
for(j=0;j<t;j++)
{
c=h=o=n=0;
scanf("%s",str);
len=strlen(str);
str[len]='=';
for(i=0;i<len+1;)
{
tc=th=to=tn=0;
switch(str[i++]) //此处已经把向后移了一位
{
case 'C':
if(str[i]>='0'&&str[i]<='9') //当前字符是数字的话
{
tc=str[i++]-'0';
while(str[i]>='0'&&str[i]<='9')
{
tc=tc*10+(str[i++]-'0');
}
c+=tc;
}
else //当前不是数字的话
{
c++;
}
break;
case 'H':
if(str[i]>='0'&&str[i]<='9') //当前字符是数字的话
{
th=str[i++]-'0';
while(str[i]>='0'&&str[i]<='9')
{
th=th*10+(str[i++]-'0');
}
h+=th;
}
else //当前不是数字的话
{
h++;
}
break;
case 'O':
if(str[i]>='0'&&str[i]<='9') //当前字符是数字的话
{
to=str[i++]-'0';
while(str[i]>='0'&&str[i]<='9')
{
to=to*10+(str[i++]-'0');
}
o+=to;
}
else //当前不是数字的话
{
o++;
}
break;
case 'N':
if(str[i]>='0'&&str[i]<='9') //当前字符是数字的话
{
tn=str[i++]-'0';
while(str[i]>='0'&&str[i]<='9')
{
tn=tn*10+(str[i++]-'0');
}
n+=tn;
}
else //当前不是数字的话
{
n++;
}
break;
}
}
cnt=c*12.01+h*1.008+o*16.00+n*14.01;
printf("%.3f\n",cnt);
}
return 0;
}
posted on 2012-10-20 16:16 Arcfat Tsui 阅读(677) 评论(0) 编辑 收藏 举报