0
点赞
收藏
分享

微信扫一扫

人民币金额打印

程序员知识圈 2022-01-13 阅读 43
python

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

在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万

以下的例子示范了阿拉伯数字到人民币大写的转换规则:

1	壹圆

11	壹拾壹圆

111	壹佰壹拾壹圆

101	壹佰零壹圆

-1000	负壹仟圆

1234567	壹佰贰拾叁万肆仟伍佰陆拾柒圆

现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.

例如:

a=1

则输出:

壹圆

思路:数字部分通过hash列表处理,关键点在于数字中的零的输出格式。只有前一位不为零且当前位数字为零且不为最后一位的时候才输出零。例如120030,仅输出第一个零。

'''
Author: stella
Date: 2020-09-05 16:34:08
LastEditors: stella
LastEditTime: 2022-01-13 01:27:40
FilePath: /Python/caogao.py
'''
# 举例:a = 23423451
A = ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
B = ['拾', '佰', '仟', '万']
C = []  # 用于存储a的各个位上的数字
s = ''
if (a < 0):
    s += '负'
    a *= -1
if (a == 0):
    s += '零'
while True:  # 将a转换为数组形式
    C.append(a % 10)
    a //= 10
    if (a == 0):
        break
C.reverse()  # 逆序
flag = 1  # flag为1表示不是0,flag为0表示是0
for i in range(0, len(C)):
    # 只有当前一位不为0,C[i]等于0,i不为最后一个元素时才输出'零'
    if (flag and C[i] == 0 and i != len(C) - 1):
        s += '零'
        flag = 0
    if (C[i]):  # 如果该位数字不为0
        s += A[C[i]]
        flag = 1
    if (flag and i != len(C) - 1):
        s += B[(len(C) - i - 2) % 4]  # 对4取模
s += '圆'
print(s)
举报

相关推荐

0 条评论