C语言编程练习10:计算相对分子质量

题目描述

小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。

输入

输入的第一行是一个正整数n,表示有n组测试数据。
接下来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;
}
原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14310945.html