求助
查看原帖
求助
1272259
cgxd楼主2024/5/19 21:51
#include<bits/stdc++.h>
using namespace std;
map<string, double> m;
double read(){
	char c;
	cin >> c;
	string s(1, c);
	double cnt = 0, last;
	while(cin >> c){
		switch(c){
			case '(':{
				cnt += last = read();
				break;
			}case ')':
				return cnt;
			case '_':{
				cnt += last = m[s];
				s.resize(0);
				char c1;
				cin >> c1;
				int k;
				cin >> k >> c1;
				cnt += (k - 1) * last;
				break;
			}case '~':{
				int k;
				cin >> k;
				return cnt + k * 18;
			}default:{
				if(islower(c))
					s.push_back(c);
				else if(isupper(c)){
					cnt += last = m[s];
					s.resize(0);
					s.push_back(c);
				}
			}
		}
	}return cnt + m[s];
}int main(){
	m["H"] = 1;
	m["C"] = 12;
	m["N"] = 14;
	m["O"] = 16;
	m["F"] = 19;
    m["Na"] = 23;
	m["Mg"] = 24;
	m["Al"] = 27;
	m["Si"] = 28;
    m["P"] = 31;
	m["S"] = 32;
	m["Cl"] = 35.5;
	m["K"] = 39;
    m["Ca"] = 40;
	m["Mn"] = 55;
	m["Fe"] = 56;
	m["Cu"] = 64;
    m["Zn"] = 65;
	m["Ag"] = 108;
	m["I"] = 127;
	m["Ba"] = 137;
    m["Hf"] = 178.5;
	m["Pt"] = 195;
	m["Au"] = 197;
	m["Hg"] = 201;
	cout << read();
}
2024/5/19 21:51
加载中...