人民币金额打印

来源:互联网 发布:linux编译c文件 编辑:程序博客网 时间:2024/06/05 10:21

题目描述

银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
-1000 负壹仟圆
1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆
现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.
例如:a=1
则输出:壹圆

代码

#!/usr/bin/env python#_*_coding:utf-8_*___author__ = "zaipingY"a = 1000205b = u'零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万 'def func(a):    '''每4位一组进行描述,a不超过1亿,所以最多分为2组(第一组是低4位),给第二组后面加上万,其余是一样的'''    s = ''    sign = ''    if a < 0:        sign += u'负'    if a == 0:        sign += u'零'    a = abs(a)    # 组数    count_1 = 0    while a:        #每一组的描述        s_1= ''        i = str(a%10000)        #count 用来计数,        count = len(i)-2        #如果第1组前两位都是0,则要加上一个 零        if len(i)<3 and count_1 == 0:            s_1 += u'零'        for j in i:            #如果j等于零且上一个也是零,那么不用再加零了            if int(j)==0 and s_1[-1] == u'零' :                count -= 1                continue            s_1 += b.split()[int(j)]            #如果j等于0,后面不加‘十百千万’这些描述            if int(j) == 0:                count -= 1                continue            #除个位外,加‘十百千万’这些描述            if count != -1:                s_1 += b.split()[count+10]            count -= 1        #如果最后一位是零,去掉        if s_1[-1] == u'零':            s_1 = s_1[:-1]        #给第二组加 万        if count_1 != 0:            s_1 += u'万'        s = s_1 + s        a //= 10000        count_1 += 1    return sign + s +u'圆'print(func(a))
原创粉丝点击