第16题:人民币金额打印

题目描述:
银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。

在中文大写方式中,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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值