题目描述
PDF
输入格式
无
输出格式
无
题意翻译
现给你若干个分子式需要你求分子量。
例如:C6H5OH的分子量为12.016+1.0085+16.00+1.008=94.108g/mol。
(ps:数字为数字前面元素的下标,所有分子式均无括号例如:2OH=2*16.00+1.008)
输入输出格式
输入:
输入n(2<=n<=99)
接下来n行为分子式
输出:
输出每个分子的分子式
输入输出样例
无
注意处理 下标是两位数的情况
#include<cstdio>
#include<cstring>
#include<iostream>
inline double Get_(char x) {
double asn = 0;
switch(x) {
case 'C': asn = 12.01; break;
case 'H': asn = 1.008; break;
case 'N': asn = 14.01; break;
case 'O': asn = 16.00; break;
}
return asn;
}
int main(int argc,char* argv[]) {
char x,s[20];
int T; scanf("%d",&T);
while(T--) {
scanf("%s",s);
double sum = 0;
int len = strlen(s);
for(int i=0; i<len; i++) {
if(isalpha(s[i]) && isdigit(s[i + 1]) && isdigit(s[i + 2]))
sum += Get_(s[i]) * ((s[i + 1] - '0') * 10 + s[i + 2] - '0');
else if(isalpha(s[i]) && isdigit(s[i + 1]))
sum += Get_(s[i]) * (s[i + 1] - '0'); //char型的数字转化成int型要减去0
else if(isalpha(s[i]) && (!isdigit(s[i + 1])))
sum += Get_(s[i]);
}
printf("%.3f\n",sum);
}
return 0;
}