- 题目大意
计算分子式质量不过元素只有C,H,O,N,而且结果要保留3个小数喔。
- 题解
建立字母到数值的映射数组。 原子后面跟的可能为个数可能为多位数,注意让i直接向后跳一步。碰到字母直接加原子量;碰到数字用(数字-1)乘以last atom的原子量即可。
- 代码
#include<cstdio>
#include<ctype.h>
char s[150];
const double d[] = {0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00};
int main() {
int t;
scanf("%d", &t);
while(t--) {
double sum = 0;
int n;
scanf("%s", s);
char x = s[0];
for(int i = 0; s[i] != '\0'; ++i) {
if(isalpha(s[i])) {
x = s[i];
sum += d[x-'A'];
}
else {
n = s[i]-'0';
if(isdigit(s[i+1])) {
n = n*10 + (s[i+1]-'0');
i++;
}
sum += d[x-'A']*(n-1);
}
}
printf("%.3f\n", sum);
}
return 0;
}