1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 人民币金额打印 将金额数字转换为汉字描述。

人民币金额打印 将金额数字转换为汉字描述。

时间:2022-07-30 13:41:46

相关推荐

人民币金额打印 将金额数字转换为汉字描述。

人命币金额打印

题目描述思路解析完整代码

题目描述

题目描述:

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

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

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

1 壹圆

11 壹拾壹圆

111 壹佰壹拾壹圆

101 壹佰零壹圆

-1000 负壹仟圆

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

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

例如:a=1

则输出:壹圆

思路解析

1:把数字金额转为文字描述,首先数字0-9转为中文很简单,根据对应关系一一转换即可,得到第一个转换列表trans_list1,具体可对照代码看。

2:然后就是每个数字后跟着的单位描述,个位是圆,十位是拾,百位是佰,那么也是有一定顺序关系的,得到单位描述的转换列表,trans_list2

3:然后就可以试一试了。

# pythondef func(a):trans_list1 = [u'零', u'壹', u'贰', u'叁', u'肆', u'伍', u'陆', u'柒', u'捌', u'玖']trans_list2 = [u'圆', u'拾', u'佰', u'仟', u'万', u'拾', u'佰', u'仟']# enumerate(str(a))将数字按从左到右的顺序和index对应起来# 如1230对应为 (0,1)(1,2)(2,3)(4,0)for index, str_n in enumerate(str(a)):result += trans_list1[int(str_n)] + trans_list2[len(str(a))-1-index]return (result)while True:a = int(input())print(func(a))

发现输出的结果中对于几种特殊情况的处理还有点问题:

1:对于数字为0的处理,0的位置上会生成零圆,零佰,零仟这时候是有问题的,如100 1001会生成壹佰零拾零万 壹仟零佰零拾壹圆我们想要的是壹佰万 壹仟零壹圆,多观察几个类似带零的数字,思考过后,需要把数字为零的单位去掉,如零佰需要把佰去掉,且零被夹在中间时如101 1001是需要保留一个零的,那么得到第三个转换列表。

replace_list = [(u'零拾', u'零'), (u'零佰', u'零'), (u'零仟', u'零'), (u'零零零',u'零'), (u'零零','零'), (u'零万', u'万'), (u'零圆', u'圆')]```

零万和零圆不替换为零这是因为即使为零,万这个单位和圆这个单位都是必要的。

顺序也是有说法的,(u’零万’, u’万’), (u’零圆’, u’圆’)需要摆在最后面,因为100 1000这种情况摆在前面会变成壹佰零万 柒仟零圆这样子的话总会保留一个零下来,所以放到最后把这种情况的零消除掉。

2:对负数的处理,逻辑内暂时是没有的

(result, a) = (u'负', abs(a)) if a < 0 else ('', a)

如果是非负数就返回它本身并初始化result为空字符’’,如果是负数就返回它的绝对值,并把result初始化为’负’。

3:对于金额0的处理

return (u'零圆' if a==0 else result)

在结果最后,如果是数字0直接返回’零元’,否则返回转换生成的结果(否则数字0自动生成的结果为’圆’,不符合题目要求)。

综上所述,下面给出完整的代码逻辑。

完整代码

# pythondef func(a):trans_list1 = [u'零', u'壹', u'贰', u'叁', u'肆', u'伍', u'陆', u'柒', u'捌', u'玖']trans_list2 = [u'圆', u'拾', u'佰', u'仟', u'万', u'拾', u'佰', u'仟']replace_list = [(u'零拾', u'零'), (u'零佰', u'零'), (u'零仟', u'零'), (u'零零零',u'零'), (u'零零','零'), (u'零万', u'万'), (u'零圆', u'圆')](result, a) = (u'负', abs(a)) if a < 0 else ('', a)for index, str_n in enumerate(str(a)):result += trans_list1[int(str_n)] + trans_list2[len(str(a))-1-index]for k,v in replace_list:result = result.replace(k, v) return (u'零圆' if a==0 else result)while True:a = int(input())print(func(a))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。