Problem Description
给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C,H,O,N, 原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。
Sample Input
4
C
C6H5OH
NH2CH2COOH
C12H22O11
Sample Output
12.010
94.108
75.070
342.296
#include<stdio.h>
#include<string.h>
int ch(char ch)//判断是不是数字,是返回1,否则0
{
if(ch >= '0' && ch <= '9') return 1;
else return 0;
}
int main()
{
int t, c, h, o, n, m, i;
char a[85];
scanf("%d", &t);
while(t--)
{
//分别记录每个元素出现的次数
c = 0; h = 0; n = 0; o = 0;
scanf("%s", a);
m = strlen(a);
for(i = 0; i < m; i++)
{
if(a[i] == 'C')
{
if(ch(a[i+1]) && !ch(a[i+2]))//个位数
c = c + a[i+1] - '0';
else if(ch(a[i+1]) && ch(a[i+2]))//十位数,题目最大是99
{
c = c + (a[i+1] - '0') * 10 + a[i + 2] - '0';
}
else c += 1;
}
if(a[i] == 'H')
{
if(ch(a[i+1]) && !ch(a[i+2]))
h = h + a[i+1] - '0';
else if(ch(a[i+1]) && ch(a[i+2]))
{
h = h + (a[i+1] - '0') * 10 + a[i + 2] - '0';
}
else h += 1;
}
if(a[i] == 'O')
{
if(ch(a[i+1]) && !ch(a[i+2]))
o = o + a[i+1] - '0';
else if(ch(a[i+1]) && ch(a[i+2]))
{
o = o + (a[i+1] - '0') * 10 + a[i + 2] - '0';
}
else o += 1;
}
if(a[i] == 'N')
{
if(ch(a[i+1]) && !ch(a[i+2]))
n = n + a[i+1] - '0';
else if(ch(a[i+1]) && ch(a[i+2]))
{
n = n + (a[i+1] - '0') * 10 + a[i + 2] - '0';
}
else n += 1;
}
}
printf("%.3lf\n", c*12.01 + h*1.008 + o*16.00 + n*14.01);//输出
}
return 0;
}