版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/richenyunqi/article/details/82078959
Uva-1586. Molar mass题解
欢迎访问我的Uva题解目录https://blog.csdn.net/richenyunqi/article/details/81149109
题目描述
题意解析
给出分子式,求分子质量。本题中分子式只包含4种原子:C、H、O、N。
C++代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int T;
string s;
scanf("%d",&T);
unordered_map<char,double>m={//存储原子和对应的原子质量
{'C',12.01},{'H',1.008},{'O',16.00},{'N',14.01}
};
while(T--){
cin>>s;
double result=0.0;
for(int i=0;i<s.size();){
int j=i+1;//变量j用来寻找字符s[i]后的第一个字母的位置
while(j<s.size()&&isdigit(s[j]))++j;
if(j==i+1)//i,j之间没有数字
result+=m[s[i]];//加一份原子质量
else//i,j之间有数字
result+=m[s[i]]*stoi(s.substr(i+1,j-i));
i=j;
}
printf("%.3f\n",result);
}
return 0;
}