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; }