题目描述:
银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
-1000 负壹仟圆
1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆
现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.
例如:
a=1
则输出:
壹圆
思路:数字部分通过hash列表处理,关键点在于数字中的零的输出格式。只有前一位不为零且当前位数字为零且不为最后一位的时候才输出零。例如120030,仅输出第一个零。
# 举例:a = 23423451
A = ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
B = ['拾', '佰', '仟', '万']
num = [] # 用于存储a的各个位上的数字
s = ''
if (a < 0):
s += '负'
a *= -1
if (a == 0):
s += '零'
while True: # 将a转换为数组形式
num.append(a % 10)
a //= 10
if (a == 0):
break
num.reverse() # 逆序
flag = 1 # flag为1表示不是0,flag为0表示是0
for i in range(0, len(num)):
# 只有当前一位不为0,该位数字等于0,不为最后一个元素时才输出'零'
if (flag and num[i] == 0 and i != len(num) - 1):
s += '零'
flag = 0
if (num[i]): # 如果该位数字不为0
s += A[num[i]]
flag = 1
if (flag and i != len(num) - 1):
s += B[(len(num) - i - 2) % 4] # 对4取模
s += '圆'
print(s)