C语言编程练习10:计算相对分子质量
题目描述
小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。
输入
输入的第一行是一个正整数n,表示有n组测试数据。
接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。
注意:
输入数据只包含8种元素,而这8种元素的相对原子质量如下:
H(1),C(12),N(14),O(16),F(19),P(31),S(32),K(39)。
接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。
注意:
输入数据只包含8种元素,而这8种元素的相对原子质量如下:
H(1),C(12),N(14),O(16),F(19),P(31),S(32),K(39)。
输出
对于每组输入,输出相对分子质量。
样例输入 Copy
4
H2O
KOH
CH4
SO2
样例输出 Copy
18
56
16
64
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int zimu(char ch)
{
switch(ch)
{
case 'H':return 1;break;
case 'C':return 12;break;
case 'N':return 14;break;
case 'O':return 16;break;
case 'F':return 19;break;
case 'P':return 31;break;
case 'S':return 32;break;
case 'K':return 39;break;
default:return 0;break;
}
}
int main()
{
int n;
cin >> n;
getchar();
while(n--)
{
char s[100];
cin >> s;
int l = strlen(s);
int t=0,sum=0,flag,c=0;
for(int i = 0;i<l;i++)
{
c=0;
flag =0;
t=0;
while(s[i+1]>='0'&&s[i+1]<='9')
{
flag=1;
t = t*10 + s[i+1]-'0';
i++;
c++;//记录字母后的数字个数
}
if(flag)//根据字母后面是否有数字进行求和
{
sum = sum + zimu(s[i-c])*t;
}
else
{
sum = sum + zimu(s[i]);
}
}
cout << sum <<endl;
}
return 0;
}

浙公网安备 33010602011771号