# 从零开始的记账工具人

这道题考察选手基本的编程处理数据的能力，常见的编程语言都可以编写出解题代码。

## 解法 1

手工计算（听说真的有同学是这样做的？）

## 解法 2

使用任意文本编辑器（或者 Excel 本身）做字符串替换，替换规则如下：

```
'零' -> ''
'壹' -> '1'
'贰' -> '2'
'叁' -> '3'
'肆' -> '4'
'伍' -> '5'
'陆' -> '6'
'柒' -> '7'
'捌' -> '8'
'玖' -> '9'
'拾' -> '*10+'
'佰' -> '*100+'
'仟' -> '*1000+'
'元' -> '+'
'角' -> '/10+'
'分' -> '/100'
'++' -> '+'
'整' -> ''
```

然后如果开头有乘号或者结尾有加号，去掉即可，这样的数学表达式求值即可得到正确的结果。

## 解法 3

编程求解，这里使用 Python 语言。

我们首先使用 Excel（或者其他商业的、开源的、在线的电子表格工具）将下载的文件转换为 `.csv` 格式，即逗号分隔的文本。（当然，你也可以使用解析 Excel 文件格式的库来处理）

然后在 Python 中安装 cn2an 这个中文数字转换的库：

`python3 -m pip install cn2an`

然后使用 Python 程序处理这个文件：

```python
import cn2an
lines = open('bills.csv').readlines()[1:]
s = 0
for line in lines:
    a, b = line.strip().split(',')
    n = 0
    if '元' in a:
        y, a = a.split('元')
        n += cn2an.cn2an(y, "smart")
    if '角' in a:
        y, a = a.split('角')
        n += cn2an.cn2an(y, "smart") / 10
    if '分' in a:
        y, a = a.split('分')
        n += cn2an.cn2an(y, "smart") / 100
    s += n * int(b)
print(s)
```

最后输出的结果可能有一些浮点误差，自己四舍五入一下就好了。（更好的办法是使用整数来计算，但是我比较懒就不写了）
