您的位置:首页 > 其它

uva 1586 分子量

2017-07-09 17:56 218 查看
题意:给你一个分子式,求出这个分子的摩尔质量是多少,已知分子式只含有 C、H、O、N 四种元素。

这是一道非常简单的题,只需要用sum累加所有原子的原子质量就行了,遇到数字的时候就累加这个数字乘上前面的原子的原子质量,很水,却在细节上浪费了一小会,实在不应该。

#include<bits/stdc++.h>

using namespace std;
map<char,double>mp;

int main()
{
int t,i,len;
double sum;
string str;
char ch;
mp['C']=12.01,mp['H']=1.008,mp['O']=16.00,mp['N']=14.01;//用map来保存每个原子的原子质量比较方便
cin>>t;
while(t--)
{
cin>>str;
len=str.length();
i=0;
sum=0;
int cnt=0;
while(i<len)
{
if(isalpha(str[i]))
sum+=mp[str[i]],i++;
if(isdigit(str[i]))
ch=str[i-1];
while(isdigit(str[i]))
{
cnt=cnt*10+str[i]-'0';
i++;
}
if(isdigit(str[i-1]))
{
sum+=(cnt-1)*mp[ch];//cnt减 1 是因为前面第一步已经累加过一次这个原子的原子质量了
cnt=0;
}
}
printf("%.3f\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: