题目:银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
题目来源
核心思想:递归
具体过程如下:
数字:对应的中文货币
字典(人民币中文符号:零壹贰叁肆伍陆柒捌玖拾佰仟万
)rmbConverting
:
拾佰仟万
的情况;-->实现通过将其转化为字符串,然后观察0的个数
将其转化为整佰+两位数
,目的方便递归;将其转化为整仟+三位数
a//10000
和a-a//10000*10000
,然后递归即可;printrmb
。
rmb_unit=list(u‘零壹贰叁肆伍陆柒捌玖拾佰仟万‘)
rmb_num=[0,1,2,3,4,5,6,7,8,9,10,100,1000,10000]
rmb_dict={i:j for i,j in zip(rmb_num,rmb_unit)}
def rmbConverting(a,Dict=rmb_dict):
"""
这个函数只处理正数的情况
@params:a为输入的整数
@params: Dict为数字对应的中文,type:dict
"""
unit=[i[0] for i in list(Dict.items())[1:]]
str_a_len=len(str(a))
all_0_num=list(str(a)).count(‘0‘)
if a <=10:
return Dict[a]+‘圆‘
elif str_a_len-all_0_num==1:
tmp=10**all_0_num
return Dict[a/tmp]+Dict[tmp]+‘圆‘
elif a<100:
return Dict[a//10]+Dict[10]+Dict[a-a//10*10]+‘圆‘
elif a<1000:
b=a//100
c=a-b*100
res=Dict[b]+Dict[100]+rmbConverting(c) if c>=10 else Dict[b]+Dict[100]+‘零‘+rmbConverting(c)
return res
elif a<10000:
b=a//1000
c=a-b*1000
return Dict[b]+Dict[1000]+rmbConverting(c) if c>=100 else Dict[b]+Dict[1000]+‘零‘+rmbConverting(c)
else:
b=a-a//10000*10000
return rmbConverting(a//10000)[:-1]+Dict[10000]+rmbConverting(b) if b>=1000 else rmbConverting(a//10000)[:-1]+Dict[10000]+‘零‘+rmbConverting(b)
def printrmb(a):
print( ‘负‘+rmbConverting(abs(a)) if a<0 else rmbConverting(a))
if __name__==‘__main__‘:
a=1234
printrmb(a)
原文:https://www.cnblogs.com/B-Hanan/p/12751616.html