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