题目描述:
银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
-1000 负壹仟圆
1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆
现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.
例如:a=1
则输出:壹圆
示例:
输入:a = 0
输出:零圆
这题写到崩溃,这个网站的oj简直要气死人,之前用函数提交,显示a在赋值前已经被引用错误(指的是num=a)这步,后面干脆直接去掉函数
这题大致思路是先把a的值装进trans中,因为不知道a有多少位,但一定是小于八位数(a的绝对值小于1亿),然后加上单位,再去掉最前面所有的0,再去掉中间连续的0,在一些特殊位置在进行细处理
lst1=['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
lst2=['仟', '佰', '拾', '万', '仟', '佰', '拾', '圆']
trans=['零', '零', '零', '零', '零', '零', '零', '零']
num=a
num1=7
#处理负数问题
if num < 0:
result = "负"
num = -num
a = num
else:
a = num
result = ""
#将a的值弄进trans里面并且加上对应的单位
while a!=0:
trans[num1]=lst1[a%10]
num1-=1
a=a//10
for i in range(0,8):
if trans[i]!='零':
trans[i]=f'{trans[i]}{lst2[i]}'
#在特殊位置进行细处理
if trans[3]=='零' and num>10000:#注意a要大于1万
trans[3]='万'
if trans[7]=='零':
trans[7]='圆'
#去除前面多余的零
while '零' in trans[0]:
trans.pop(0)
#去掉连续的0
for key, value in enumerate(trans):
if value[0] != '零':
result += value
else:
if value[0] != trans[key-1][0]:
result += '零'
#注意零万和零圆的情况,例如壹佰零万圆,壹仟零圆这种类型的情况
result=result.replace('零万','万')
result=result.replace('零圆','圆')
#a=0时单列
if num == 0:
result = "零圆"
print(result)