#19236. 化学式分子量的计算
化学式分子量的计算
化学,是物质的诗篇。每一个分子都是一个微小的宇宙,原子按照严格的数学韵律在其中起舞。而相对分子质量(Relative Molecular Mass),就是衡量这首诗篇“分量”的标尺。
为了考察学生对字符串解析(String Parsing)、**哈希表(Hash Map)以及栈(Stack)**的掌握程度,我为你构思了这道题目。它模拟了化学家计算物质摩尔质量的过程,是一个经典的“表达式求值”问题的变体。
[OI 题库] 门捷列夫的账单 (Mendeleev's Receipt)
题目背景
“如果你不能量化它,你就不能理解它。” —— 现代化学之父们
在星际飞船的合成实验室里,AI 助手“门捷列夫”需要合成各种复杂的化合物。为了精确配比原料,它必须迅速计算出任何给定化学式的相对分子质量。
化学式的书写规则如下:
- 元素符号:由一个大写字母,或者一个大写字母加一个小写字母组成(如
H,O,Na,Cl)。 - 原子个数:元素右下角的数字表示个数(如
H2表示 2 个 H)。如果省略,默认为 1。 - 原子团:可以用括号
()将一部分括起来,括号外的数字表示整个原子团的倍数(如Ca(OH)2,表示 1 个 Ca 和 2 个 OH 原子团)。括号可以嵌套。
你需要编写程序,帮助“门捷列夫”计算出给定化学式的总相对分子质量。
题目描述
输入包含两部分:
- 一张元素周期表:包含 个元素的符号和它们的相对原子质量(整数)。
- 一个化学式字符串 。
请输出该化学式的相对分子质量。
输入格式
第一行一个整数 ,表示已知元素的数量。 接下来 行,每行包含一个字符串(元素符号)和一个整数(相对原子质量),以空格分隔。 最后一行,一个字符串 ,表示需要计算的化学式。
输出格式
一个整数,表示总相对分子质量。
样例数据
样例 1 (水)
2
H 1
O 16
H2O
18
样例 2 (葡萄糖)
3
C 12
H 1
O 16
C6H12O6
180
样例 3 (嵌套括号 - 某种复杂的晶体)
4
K 39
Al 27
S 32
O 16
KAl(SO4)2
258
(解析:K=39, Al=27. SO4 = 32 + 16*4 = 96. (SO4)2 = 96*2 = 192. Total = 39+27+192 = 258)
数据范围
- 化学式 的长度不超过 1000。
- 相对原子质量和最终结果均在
int范围内(不会超过 )。 - 保证化学式合法,括号匹配正确,且出现的所有元素均在给定的周期表中。