//Uva-1586
#include<iostream>
#include<string>
using namespace std;
#define LOCAL
int main(){
#ifdef LOCAL
FILE *fin,*fout;
fin = freopen("xt3-2in.txt","r",stdin);
fout= freopen("xt3-2out.txt","w",stdout);
#endif //LOCAL
int n;cin>>n;
float sum;
string s;
while(n--){
cin>>s;
int i=0;
sum=0;
for(;s[i];){
switch(s[i]){
case 'C':
if(s[i+1]&&s[i+2]&&isdigit(s[i+1])&&isdigit(s[i+2])){
//有后两位且为数字
sum+=12.01*((int)(s[i+1]-'0')*10+(int)(s[i+2]-'0'));
i+=3;
}
else if(s[i+1]&&isdigit(s[i+1])){
//有后1位且为数字
sum+=12.01*(int)(s[i+1]-'0');
i+=2;
}
else{
//有后两位,不为数字
sum+=12.01;
i++;
}
break;//C
case 'H':
if(s[i+1]&&s[i+2]&&isdigit(s[i+1])&&isdigit(s[i+2])){
//有后两位且为数字
sum+=1.008*((int)(s[i+1]-'0')*10+(int)(s[i+2]-'0'));
i+=3;
}
else if(s[i+1]&&isdigit(s[i+1])){
//有后1位且为数字
sum+=1.008*(int)(s[i+1]-'0');
i+=2;
}
else{
//有后两位,不为数字
sum+=1.008;
i++;
}
break;//H
case 'O':
if(s[i+1]&&s[i+2]&&isdigit(s[i+1])&&isdigit(s[i+2])){
//有后两位且为数字
sum+=16.00*((int)(s[i+1]-'0')*10+(int)(s[i+2]-'0'));
i+=3;
}
else if(s[i+1]&&isdigit(s[i+1])){
//有后1位且为数字
sum+=16.00*(int)(s[i+1]-'0');
i+=2;
}
else{
//有后两位,不为数字
sum+=16.00;
i++;
}
break;//O
case 'N':
if(s[i+1]&&s[i+2]&&isdigit(s[i+1])&&isdigit(s[i+2])){
//有后两位且为数字
sum+=14.01*((int)(s[i+1]-'0')*10+(int)(s[i+2]-'0'));
i+=3;
}
else if(s[i+1]&&isdigit(s[i+1])){
//有后1位且为数字
sum+=14.01*(int)(s[i+1]-'0');
i+=2;
}
else{
//有后两位,不为数字
sum+=14.01;
i++;
}
break;//N
}
}
printf("%.3lf\n",sum);
}
}
Uva-1586 分子量
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1586 - Molar mass 习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 20...