题目链接
题目分析
这道题目相对来讲比较简单,模拟每个字符即可。注意:最好不要把原子的个数初始化为1,因为会导致如果这个原子数量是12的时候,扫描到第二个字符是2的时候,就会不知道当前的数量是初始化的1还是应该变为10的1(标志位也可以解决)。
源代码
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main() {
int t;
scanf("%d",&t);
char s[95];
for(int i=0;i<t;i++){
scanf("%s",s);
int len=strlen(s);
double tot=0,base=0;
int n=0; //初始化是0, 要计算的时候如果还是0再给它加1
for(int j=0;j<len;j++) {
if(isalpha(s[j])) {
if(n==0) n++;
tot+=base*n;
n=0;
if(s[j]=='C') base=12.01;
else if(s[j]=='H') base=1.008;
else if(s[j]=='O') base=16;
else if(s[j]=='N') base=14.01;
} else if(isdigit(s[j])) {
if(n==0) n=s[j]-'0';
else n=n*10+s[j]-'0';
}
}
if(n==0) n++;
tot+=base*n;
printf("%.3f\n",tot);
}
return 0;
}