人民币金额打印

描述:

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

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

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

1 壹圆

11 壹拾壹圆

111 壹佰壹拾壹圆

101 壹佰零壹圆

-1000 负壹仟圆

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

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

例如:a=1

则输出:壹圆

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

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

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

之前的问题不过是因为 1011 有问题,输出零后没有及时修正状态,导致后面多输出零
预期:壹仟零壹拾壹圆
实际:壹仟零壹拾零壹圆
 
 
from __future__ import print_function
a=1011
all_str = ""
if a < 0:
    a = -a
    all_str = u"负"
else:
    all_str = ""
chinese_num_dic = [u"零",u"壹",u"贰",u"叁",u"肆",u"伍",u"陆",u"柒",u"捌",u"玖"]
chinese_radix_list = [u"圆",u"拾",u"佰",u'仟',u"万",u"拾",u"佰",u'仟',u"亿"]
a = str(a)
a_len = len(a)
zero_flag = 0
if a != '0':
    for item in a:
        num = int(item)
        if num > 0 :
            if zero_flag == 1:
                all_str += u"零"
                zero_flag = 0   #问题所在
            all_str += chinese_num_dic[int(item)]
            all_str +=chinese_radix_list[a_len-1]
        else:
            zero_flag = 1
            if chinese_radix_list[a_len-1] == u'亿' or chinese_radix_list[a_len-1] == u'万' or chinese_radix_list[a_len-1] == u'圆':
                zero_flag = 0
                all_str += chinese_radix_list[a_len-1]
        a_len -=1
else:
    all_str = u'零圆'
print(all_str,end="")

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值