传送门: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)