题解 | #人民币转换#
人民币转换
https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
import sys n = input() m0 = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖','拾'] m2 = {'亿':100000000, '万':10000, '仟':1000, '佰':100, '拾':10} m1 = {'亿':0, '万':1, '仟':2, '佰':3, '拾':4} def back(num, res): if num == 0: return res if num < 10: flag = '零' if (res and m1[res[-1]] != 4) else '' # 当前单位和上一个单位是否断层,是则添加‘零’ return res + flag + m0[num] for k,v in m2.items(): r = num // v if r > 0: num_new = num - r*v flag = '零' if (res and m1[k] - m1[res[-1]] > 1) else '' # 当前单位和上一个单位是否断层,是则添加‘零’ res_new = res + flag + back(r, '') + k # back(r, '') 目的在于求出 xxx 万里面的xxx的表达,所以需要递归调用一次r的人民币转换 return back(num_new, res_new) #在当前单位求完整的表达式 (例如xxx万)后,将num减去万的部分,继续求剩下的部分的表达式 n1, n2 = [i for i in str(n).split('.')] n2 = '00' if n2 == '0' else n2 r1 = back(int(n1), '').replace('壹拾', '拾') # 题目规则 4 r1 = "人民币" + r1 + '元' if r1 else "人民币" # 应对整数部分为 0 的情况 r2 = ( m0[int(n2[0])] + '角' + m0[int(n2[1])] + '分' ).replace('零角零分', '整').replace('零分', '').replace('零角', '') #小数部分全部省略‘零’ print(r1 + r2)