0X000F 人民币金额打印

传送门: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日加强,原来通过的代码可能不能再次通过。

#这程序我写的略乱。。今天心情不好懒得优化了。就这样吧。
#目前还没看出来有什么bug

num = input()#将输入的数据存在num中
result = ''#result是要输出的结果串
ori = '仟佰拾万千佰拾圆'#方便加上单位
dic = {#构造对应关系
    '1':'壹',
    '2':'贰',
    '3':'叁',
    '4':'肆',
    '5':'伍',
    '6':'陆',
    '7':'柒',
    '8':'捌',
    '9':'玖'
}
if num[0] == '-':#对负数情况进行处理
    result += '负'
    num = num[1:]
count = 0
for i in num:#记录有多少位数,由此来判定用到多少单位。这样好控制循环
    count+=1
temp = ori[-count:]#temp将用到的单位存储下来
for i in range(len(temp)):#对0进行处理。因为1000肯定不能读作壹零零零
    if num[i] == '0':
        if result[-1] != '零':
            result+='零'
        else:
            pass
    else:
        result += dic[num[i]]
        result += temp[i]
    if temp[i] == '万':#以万为分界线先来一次处理
        if result[-1] == '零':
            result = result[:-1]
            result += '万'
    elif temp[i] == '圆':#对末尾进行处理
        if result[-1] == '零':
            result = result[:-1]
            result += '圆'
        break
print(result)

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/80367063