输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
num = 'abcdefghij' # 便于通过数字0123456789对应到abcd...
n = input()
res = '' # result简写
length = len(n)
pos = length # pos表示当前的位数是第几位,比如个位pos对应1
# 第一遍处理,遇到数字就转换为对应的字母
while pos > 0:
res += num[int(n[length - pos])] # length - pos 表示当前位数在字符串n中的下标
if int(n[length - pos]) != 0:
match pos % 4:
case 2:
res += 'S'
case 3:
res += 'B'
case 0:
res += 'Q'
if pos == 9: # 如果该位是亿位,加上‘Y’
res += 'Y'
if pos == 5: # 如果该位是万位,加上‘W’
res += 'W'
pos -= 1
# 除去结尾多余的“a” 比如:700 除去之前为'hBaa' 实际上应该直接是'hB'
# 但是如果输入的就是‘0’ 不做处理
while res[-1] == 'a' and res != 'a':
res = res[:-1]
# 同理,除去"万"前面多余的“a” 比如:1001111 应为一百万一千
while res.count('aW') > 0:
res = res.replace('aW', 'W')
# 处理连续的“aa” 比如: '1001' 未处理前为’bQaab‘,实际上应该是’bQab‘
while res.count('aa') > 0:
res = res.replace('aa', 'a')
# 如果万位均为0,则需要去除"W" 比如:100000000”一亿“ 处理前为”bYW“ 实际应该是”bY“
if res.count('YW') > 0:
res = res.replace('YW', 'Y')
print(res) # 输出最终的结果
代码里有注释,应该比较好理解。
要积极向上哦^_^