相对分子质量计算器

ChthollyTree

2018-03-16 17:04:29

Personal

```cpp #include<bits/stdc++.h> using namespace std; #define db double map<string,double>p; string s,o; stack<db>t; double ans; int r; db pp; bool daz(char a) { return (a <= 'Z' && a >= 'A'); } bool xiz(char a) { return (a <= 'z' && a >= 'a'); } int main() { freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); p["H"] = 1; p["He"] = 4; p["Li"] = 7; p["Be"] = 9; p["B"] = 11; p["C"] = 12; p["N"] = 14; p["O"] = 16; p["Na"] = 23; p["Mg"] = 24; p["Al"] = 27; p["Si"] = 28; p["P"] = 31; p["S"] = 32; p["Cl"] = 35.5; p["Ar"] = 40; p["K"] = 39; p["Ca"] = 40; p["Sc"] = 45; p["Ti"] = 48; p["V"] = 51; p["Cr"] = 52; p["Mn"] = 55; p["Fe"] = 56; p["Co"] = 59; p["Ni"] = 59; p["Cu"] = 64; p["Zn"] = 66; p["Ga"] = 70; p["Ge"] = 73; p["As"] = 75; p["Se"] = 79; p["Br"] = 80; p["Kr"] = 86; p["Rb"] = 85.5; p["Sr"] = 87.62; p["Y"] = 88.9; p["Zr"] = 91.2; p["Nb"] = 92.9; p["Mo"] = 96; p["Tc"] = 99; p["Ru"] = 101; p["Rh"] = 103; p["Pd"] = 106.4; p["Ag"] = 108; p["Cd"] = 112.4; p["In"] = 115; p["Sn"] = 118.6; p["Sb"] = 121.7; p["Te"] = 127.6; p["I"] = 127; p["Xe"] = 151.5; p["Cs"] = 132.9; p["Ba"] = 157.55; p["La"] = 139; p["Ce"] = 140; p["Pr"] = 141; p["Nd"] = 144; p["Pm"] = 147; p["Sm"] = 150.4; p["Eu"] = 152; p["Gd"] = 157.2; p["Tb"] = 159; p["Dy"] = 162.5; p["Ho"] = 165; p["Er"] = 167.2; p["Tm"] = 169; p["Yb"] = 173; p["Lu"] = 175; p["Hf"] = 178.4; p["Ta"] = 181; p["W"] = 186; p["Re"] = 186; p["Os"] = 190.2; p["Ir"] = 192.2; p["Pt"] = 195; p["Au"] = 197; p["Ra"] = 226; cin>>s; s += "#"; t.push(0); for(int i = 0; i < s.size(); i ++) { //cout<<t.top()<<"\n"; //cout<<i<<" "<<o<<" "<<r<<"\n"; //cout<<i<<" "<<s[i]<<" "<<(s[i] == ')')<<"\n"; if(s[i] == '(') { if(r == 0) r = 1; int rt = t.top(); p["skser"] = pp; t.pop(); t.push(rt + p[o]*(db)r); r = 0; o = s[i]; t.push(0); continue; } if(daz(s[i]) || s[i] == '#') { if(r == 0) r = 1; int rt = t.top(); //cout<<rt<<"??"<<r<<"\n";; p["skser"] = pp; t.pop(); t.push(rt + p[o]*(db)r); r = 0; o = s[i]; } else if(xiz(s[i])) { o += s[i]; } else { if(s[i] <= '9' && s[i] >= '0') { r = 0; do { r = r*10+s[i]-48; i ++; }while(s[i] <= '9' && s[i] >= '0'); i --; } } if(s[i] == ')') { //cout<<"HAHA"<<"\n"; if(r == 0) r = 1; int rt = t.top(); p["skser"] = pp; t.pop(); t.push(rt + p[o]*(db)r); //cout<<t.top()<<"?\n"; r = 0; o = s[i]; pp = t.top(); t.pop(); if(s[i+1] <= '9' && s[i+1] >= '0') { i ++; r = 0; do { r = r*10+s[i]-48; i ++; }while(s[i] <= '9' && s[i] >= '0'); i --; } //cout<<t.top()<<"?\n"; o = "skser"; } } // if(r == 0) r = 1; // p["skser"] = pp; ans = t.top();// + p[o]*(db)r; printf("%.2f",ans); return 0; } /* NaCl H2SO4 C60 Ca(OH)100 40 + (16+1)*2 = 74 */ ```