diff --git a/players/sparkcyf/writeup.md b/players/sparkcyf/writeup.md new file mode 100644 index 0000000..623ce7b --- /dev/null +++ b/players/sparkcyf/writeup.md @@ -0,0 +1,96 @@ +# 从零开始的记账工具人 + +既然题目是用Excel分发的,那就直接用Excel解( + +解题使用的Excel表格已经放在了本文件夹内的从`零开始的记账工具人-convert.xlsx`中。 + +## Excel表格中每列的含义(Sheet1) + +### A-B + +题目给出的金额(单位为大写)和数量。 + +### G-K + +用于拆分佰,拾,元,角,分前的大写数字。 + +以G列为例: + +``` +=IFERROR(MID($A2,FIND(G$1,$A2)-1,1),0) +``` + +>函数 FIND 和 FINDB 用于在第二个文本串中定位第一个文本串,并返回第一个文本串的起始位置的值,该值从第二个文本串的第一个字符算起。 + +[`FIND`函数](https://support.microsoft.com/zh-cn/office/find%e3%80%81findb-%e5%87%bd%e6%95%b0-c7912941-af2a-4bdf-a553-d0d89b0a0628?ui=zh-cn&rs=zh-cn&ad=cn)用于寻找`A列`对应单元格(即`A2`)内“佰”字的位置,并输出其位置。 + +>MID 返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。 + +[`MID`函数](https://support.microsoft.com/zh-cn/office/mid%E3%80%81midb-%E5%87%BD%E6%95%B0-d5f9e25c-d7d6-472e-b568-4ecb12433028)用于读取“佰”字的位置的前一位的文字(即佰位的金额,此题中只有“零”和“壹”) + +> 可以使用 IFERROR 函数捕获和处理公式中的错误。 如果公式的计算结果为错误值,则 IFERROR 返回您指定的值;否则,它将返回公式的结果。 + +[`IFERROR`函数](https://support.microsoft.com/zh-cn/office/iferror-%E5%87%BD%E6%95%B0-c526fd07-caeb-47b8-8bb6-63f3e417f611)用于处理单元格金额没有佰位的情况,没有佰位时输出0。 + +对拾,元,角,分位的处理同上。 + +### M-Q + +用于将提取出的中文大写金额转换成数字。 + +以M列为例: + +``` +=VLOOKUP(G2,'LUT-UC'!$A$1:$B$12,2,0) +``` + +使用[`VLOOKUP`函数](https://support.microsoft.com/zh-cn/office/vlookup-%E5%87%BD%E6%95%B0-0bbc8083-26fe-4963-8ab8-93a18ad188a1),查找`LUT-UC`这个Sheet中对应的数字,并返回该数字。 + +`LUT-UC`中包含了中文大写金额和数字的对应关系: + +| 0 | 0 | +| ---- | ---- | +| 零 | 0 | +| 壹 | 1 | +| 贰 | 2 | +| 叁 | 3 | +| 肆 | 4 | +| 伍 | 5 | +| 陆 | 6 | +| 柒 | 7 | +| 捌 | 8 | +| 玖 | 9 | +| 拾 | 0 | + +**其中“拾”位由于有形如“拾X”(10-20之间的数额)在“拾”字之前没有“壹”,所以需要特殊处理:** + +``` +=VLOOKUP(H2,'LUT-UC'!$A$1:$B$12,2,0)+IFERROR(FIND("拾",A2,1)=1,0) +``` + +其中,处理10-20之间的数额时,“拾”位前没有字符,因此`H`列如果直接用给“佰”用的公式会返回0。因此N列公式的第二部分即是用于检查“拾”字是否是单元格的第一个字符。如果其为单元格的第一个字符,则返回**1**(给“拾”位的计数加1)。 + +### S + +``` +=M2*100+N2*10+O2*1+P2*0.1+Q2*0.01 +``` + +将解析出的每位数字相加。 + +### T + +``` +=S2*B2 +``` + +计算每行的金额之和。 + +### W2 + +``` +=SUM(T:T) +``` + +计算总金额。 + diff --git a/players/sparkcyf/从零开始的记账工具人-convert.xlsx b/players/sparkcyf/从零开始的记账工具人-convert.xlsx new file mode 100644 index 0000000..fe756c7 Binary files /dev/null and b/players/sparkcyf/从零开始的记账工具人-convert.xlsx differ