Python 练习 人民币金额打印

http://www.pythontip.com/coding/code_oj_case/16
人民币金额打印        

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

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

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

1 壹圆

11 壹拾壹圆

111 壹佰壹拾壹圆

101 壹佰零壹圆

-1000 负壹仟圆

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

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

例如:a=1

则输出:壹圆

注意:请以Unicode的形式输出答案。提示:所有的中文字符,在代码中直接使用其Unicode的形式即可满足要求,中文的Unicode编码可以通过如下方式获得:u'壹'。

注意:代码无需声明编码!!不要在代码头部声明文件编码,否则会导致语法错误!

Note:数据已于2013-11-19日加强,原来通过的代码可能不能再次通过。

# -*- coding: utf-8 -*-
w={7:'仟',6:'佰',5:'拾',4:'万',3:'仟',2:'佰',1:'拾',0:''}
d={'0':'零','1':'壹','2':'贰','3':'叁','4':'肆','5':'伍','6':'陆','7':'柒','8':'捌','9':'玖'}
def trans(a):

    b=str(a)
    c=len(b)
    #找末尾的非零数
    cz=c
    while b[cz-1]=='0':
        cz-=1
    r=''
    zflag=0
    for i in range(cz):
        if b[i]!='0':#不是0找到对应的数字单位
                r+=(d[b[i]]+w[c-i-1])
                zflag=0
        else:
            if b[i]=='0'and zflag==0:
                r+=d[b[i]]
                zflag=1
    return r
a=1123004
if a<0:
    ans+='负'
a=abs(a)
a1=a//10000
a2=a%10000
print a1,a2
ans=''
if a1>0:
    ans+=trans(a1)+'万'
if a1>0and a2<1000 and a2>0:
    ans+='零'
if a2>0:
    ans+=trans(a2)
ans+='圆'
print ans

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值