代码求调
查看原帖
代码求调
766015
xlpri楼主2022/12/2 17:08

题目: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

2022/12/2 17:08
加载中...