题解 | #人民币转换#

人民币转换

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)







全部评论

相关推荐

01-17 08:34
门头沟学院 Java
想找对象的单身狗在努力存钱:这工资不低了,再高点人家要招博士硕士的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务