已知氢的原子量为1,碳的原子量为12,氧的原子量为16,输入化学结构式/分子式,计算对应的分子量(分子的数量小于10)
例如:乙酸(醋酸)的分子式为CH3COOH,分子量为12+1×3+12+16+16+1=60
输入
分子式/结构式,长度不超过30,在分子式/结构式中只有字母和数字,
其中的字母只会出现三个大写字母CHO,另外在数值之前必然有字母。
测试数据有多组,处理到输入结束。
输出
输出分子量(正整数),每个输出占1行。
样例输入
H2
C
O2
CO2
H2O
CH4
CH3CH2OH
CH3COOH
CH3COOCH2CH3
C4H10
样例输出
2
12
32
44
18
16
46
60
88
58
#include<stdio.h>
#include<string.h>
int f(char* p, int* sum)
{
if (*p == '\0')
{
return *sum;
}
else
{
if (*p == 'C')
{
(*sum) += 12;
f((p + 1), sum);//C的质量并指向下一个原子
}
else if (*p == 'H')
{
(*sum)++;
f((p + 1), sum);
}
else if (*p == 'O')
{
*sum += 16;
f((p +1), sum);
}
else if(*p > '1' && *p <= '9')//求含有多个相同原子的质量
{
(*p)--;
f((p - 1), sum);
}
else if (*p == '1')
{
f((p + 1), sum);
}
}
}
int main()
{
char a[100];
while (scanf("%s", &a)!=EOF)
{
int j=0;
int* sum=&j;
f(a, sum);//定义一个求分子质量的函数
printf("%d\n", *sum);
}
return 0;
}