P4711 「化学」相对分子质量
题目描述
做化学题时,小 F 总是里算错相对分子质量,这让他非常苦恼。
小 F 找到了你,请你来帮他算一算给定物质的相对分子质量。
如果你没有学过相关内容也没有关系,你可以从样例和提示里理解该题所求内容。
输入格式
输入一行,为一个长度为 $L$ $(L\leq 100)$ 的不含空格的字符串,表示给定物质的化学式。
化学式仅包括以下内容:
* 元素:如 `Au`(金),`Hf`(铪),**出现的所有元素及其相对原子质量以附表为准**。
* 下标 `_{}` :表示某个原子、离子或者原子团的个数,如 `H_{2}O` 表示 $\text{H}_2\text{O}$ (水),`C_{60}` 表示 $\text{C}_{60}$ (足球烯)。
* 括号 `()`:表示一个原子团,下标对团内物质生效。如 `Ca(OH)_{2}` 表示 $\text{Ca(OH)}_2$ (熟石灰)。
* 水合物 `~`:如 `CuSO_{4}~5H_{2}O` 表示 $\text{CuSO}_4 \cdot 5\text{H}_2\text{O}$(胆矾)。水之前如果存在数字,保证一定是大于 $2$ 的正整数,如果省略该部分则默认为 $1$ 。如上述胆矾中,表示水的个数的 `5`。
形式化地讲,你处理的化学式满足以下规则:
> 分子`~`数量`H_{2}O`
其中数量或水合部分可省。
对于分子,满足:
> 部分`_{`数量`}`部分`_{`数量`}`...部分`_{`数量`}`
其中数量可省。
对于每个“部分”(原子,原子团,离子……),满足:
> 元素
或
> `(`元素`_{` 数量 `}`元素`_{` 数量`}`... 元素`_{`数量`})`
其中数量可省。
请注意,满足上述条件的化学式不会出现括号嵌套;上文中出现的 “数量” 所指代的数字不超过 $10000$。
输出格式
输出一行,包含一个整数或者小数部分为 `.5` 的实数,为你的计算结果。
保证结果不超过 $10000$。
说明/提示
### 样例解释
金 $\text{Au} : 197$
二氧化铪 $\text{HfO}_2: 178.5 + 2 \times 16= 210.5$
氢氧化钙(熟石灰)$\text{Ca(OH)}_2 : 40 + (1 + 16) \times 2 = 74$
五水硫酸铜(胆矾)$\text{CuSO}_4 \cdot 5\text{H}_2\text{O}: 64 + 32 + 16 \times 4 + 5 \times (1 \times 2 + 16) = 250$
十二水合硫酸铝钾(明矾)$\text{KAl(SO}_4)_2 \cdot 12\text{H}_2\text{O}$ (嗯 用心感受 $474$ 是对的)
### 附表:可能用到的相对原子质量
|元素|相对原子质量|
|:-:|:-:|
|$\text{H}$|$1$|
|$\text{C}$|$12$|
|$\text{N}$|$14$|
|$\text{O}$|$16$|
|$\text{F}$|$19$|
|$\text{Na}$|$23$|
|$\text{Mg}$|$24$|
|$\text{Al}$|$27$|
|$\text{Si}$|$28$|
|$\text{P}$|$31$|
|$\text{S}$|$32$|
|$\text{Cl}$|$35.5$|
|$\text{K}$|$39$|
|$\text{Ca}$|$40$|
|$\text{Mn}$|$55$|
|$\text{Fe}$|$56$|
|$\text{Cu}$|$64$|
|$\text{Zn}$|$65$|
|$\text{Ag}$|$108$|
|$\text{I}$|$127$|
|$\text{Ba}$|$137$|
|$\text{Hf}$|$178.5$|
|$\text{Pt}$|$195$|
|$\text{Au}$|$197$|
|$\text{Hg}$|$201$|
### 提示
如果你没有学习过相关内容,下面的内容可能有帮助:
> zcy 教你算相对分子质量
1. 每个元素以大写开头;
2. 计算分子质量的方法就是对每个原子出现的次数乘对应的相对原子质量求和;
3. ~( $\cdot$ ) 相当于加;
4. 下标相当于乘。