题目链接:https://vjudge.net/problem/51477/origin
只有四种原子,统计每个原子的个数,再分别乘上对应分子量就行;
上代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int T;
double sum;
char s[85];
double a[]={12.01,1.008,16.00,14.01};
int b[4];
int main(){
scanf("%d\n",&T);
while(T--){
sum=0;
b[0]=0;b[1]=0;b[2]=0;b[3]=0;
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]=='C'){
if(s[i+1]<='9'&&s[i+1]>='0'){
if(s[i+2]<='9'&&s[i+2]>='0'){
b[0]+=((s[i+2]-'0')+(s[i+1]-'0')*10);
}
else{
b[0]+=s[i+1]-'0';
}
}
else
b[0]+=1;
}
if(s[i]=='H'){
if(s[i+1]<='9'&&s[i+1]>='0'){
if(s[i+2]<='9'&&s[i+2]>='0'){
b[1]+=((s[i+2]-'0')+(s[i+1]-'0')*10);
}
else{
b[1]+=s[i+1]-'0';
}
}
else
b[1]+=1;
}
if(s[i]=='O'){
if(s[i+1]<='9'&&s[i+1]>='0'){
if(s[i+2]<='9'&&s[i+2]>='0'){
b[2]+=((s[i+2]-'0')+(s[i+1]-'0')*10);
}
else{
b[2]+=s[i+1]-'0';
}
}
else
b[2]+=1;
}
if(s[i]=='N'){
if(s[i+1]<='9'&&s[i+1]>='0'){
if(s[i+2]<='9'&&s[i+2]>='0'){
b[3]+=((s[i+2]-'0')+(s[i+1]-'0')*10);
}
else{
b[3]+=s[i+1]-'0';
}
}
else
b[3]+=1;
}
}
for(int i=0;i<4;i++){
sum+=a[i]*b[i];
}
printf("%.3f\n",sum);
}
return 0;
}