题目
输入一个由C,H,O,N组成的分子式,输出它的分子量,其中分子的下标不会超过99,分子式是一个不超过80的字符串
SAMPLE INPUT
4
C
C6H5OH
NH2CH2COOH
C12H22O11
SAMPLE OUTPUT
12.010
94.108
75.070
342.296
题解
没啥可说的,大水题。。。字符串储存,逐个去找原子的数目,结果保留三位小数。
渣代码一览
代码
#include <iostream>
#include<map>
#include<string>
#include<iomanip>
using namespace std;
int main()
{
int t;
map<char,double>mp;
mp['C']=12.01;mp['H']=1.008;mp['O']=16.00;mp['N']=14.01;
//cout<<mp['C']<<endl;
cin>>t;
while(t--){
string str;
cin>>str;
double sum=0;
for(int i=0;i<(int)str.length();i++){
if(str[i]=='C'||str[i]=='H'||str[i]=='O'||str[i]=='N')
{
if(str[i+1]=='\0'||str[i+1]=='C'||str[i+1]=='H'||str[i+1]=='O'||str[i+1]=='N')
sum+=mp[str[i]];
else if(str[i+1]>='0'&&str[i+1]<='9'&&(str[i+2]=='\0'||str[i+2]=='C'||str[i+2]=='H'||str[i+2]=='O'||str[i+2]=='N'))
{sum+=mp[str[i]]*(str[i+1]-'0');i++;}
else if(str[i+1]>='0'&&str[i+1]<='9'&&str[i+2]>='0'&&str[i+2]<='9')
{
sum+=(mp[str[i]]*((str[i+1]-'0')*10+str[i+2]-'0'));
i+=2;
}
}
}
cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;
}
return 0;
}