题目:P4711
输入:Ca(OH)_{2}
期待输出:40+(1+16)*2+
实际输出:40.000000+(O0.000000+)_{2}*2}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
string doubletostring(double d)
{
return to_string(d);
}
map<string,double> atoms;
string formula,atomm = "",atom[] = {"H","C","N","O","F","Na","Mg","Al","Si","P","S","Cl","K","Ca","Mn","Fe","Cu","Zn","Ag","I","Ba","Hf","Pt","Au","Hg"};
double atom_num[] = {1,12,14,16,19,23,24,27,28,31,32,35.5,39,40,55,56,64,65,108,127,137,178.5,195,197,201};
void findatom()
{
for(int i = 0;i < formula.size();i++)
{
if(formula[i] == '(' || formula[i] == ')')
{
atomm += formula.substr(i,i);
continue;
}
if(formula[i] == '{')
{
i++;
atomm += "*";
while(formula[i] != '}')
{
atomm += formula.substr(i,i);
i++;
}
continue;
}
if(formula[i + 1] >= 'A' && formula[i + 1] <= 'Z')
{
atomm += doubletostring(atoms[formula.substr(i,i)]);
atomm += "+";
continue;
}
if(formula[i + 1] >= 'a' && formula[i + 1] <= 'z')
{
double ato = atoms[formula.substr(i,i + 2)];
atomm += doubletostring(ato);
atomm += "+";
i++;
continue;
}
}
}
int main()
{
for(int i = 0;i < 25;++i)
{
atoms.insert(map<string,double> :: value_type(atom[i],atom_num[i]));
}
cin >> formula;
findatom();
cout << atomm;
return 0;
}
(蒟蒻觉得好像是findatom()中的第二个if错了,但蒟蒻查不出来QAQ