游客 Signup | Login
中文 | En

1039 - 相对分子质量

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

Input

输入的第一行是一个正整数n,表示有n组测试数据。
接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。
注意:
输入数据只包含8种元素,而这8种元素的相对原子质量如下:
H(1),C(12),N(14),O(16),F(19),P(31),S(32),K(39)。

Output

对于每组输入,输出相对分子质量。

Examples

Input

4
H2O
KOH
CH4
SO2

Output

18
56
16
64

Solution C

#include<stdio.h>
#include<string.h>

int e[]={1,12,14,16,19,31,32,39};
char s[]="HCNOFPSK";

int main()
{
	int n,i,j,sum,c,k,t;
	char a[100];
	scanf("%d%*c",&n);
	while(n--)
	{
		gets(a);
		sum=0;
		for(i=0;i<strlen(a);i++)
		{
			k=0;
			t=i;
			for(j=0;j<8;j++)
			{
				if(a[i]==s[j])
					c=e[j];
			}
			while(a[i]>='0'&&a[i]<='9')
			{
				k=k*10+a[i]-'0';
				i++;
			}
			i=t;
			if(!k)
				sum+=c;
			else
				sum+=c*(k-1);
		}
		printf("%d\n",sum);
	}
	return 0;
}

Solution C++

#include<stdio.h>
#include<string.h>

int e[]={1,12,14,16,19,31,32,39};
char s[]="HCNOFPSK";

int main()
{
	int n,i,j,sum,c,k,t;
	char a[100];
	scanf("%d%*c",&n);
	while(n--)
	{
		gets(a);
		sum=0;
		for(i=0;i<strlen(a);i++)
		{
			k=0;
			t=i;
			for(j=0;j<8;j++)
			{
				if(a[i]==s[j])
					c=e[j];
			}
			while(a[i]>='0'&&a[i]<='9')
			{
				k=k*10+a[i]-'0';
				i++;
			}
			i=t;
			if(!k)
				sum+=c;
			else
				sum+=c*(k-1);
		}
		printf("%d\n",sum);
	}
	return 0;
}
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题