题解 | #人民币转换#

人民币转换

https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b

'''
1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。
2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。
3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如6007.14,应写成“人民币陆仟零柒元壹角肆分“。
4、10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”
5、十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”

'''

w1 = '零壹贰叁肆伍陆柒捌玖'


def after_dot(s):
    '''求小数点后读法'''
    r = ''
    if s == '00':
        r += '整'
    if int(s[0]) > 0:
        r += w1[int(s[0])] + '角'
    if int(s[1]) > 0:
        r += w1[int(s[1])] + '分'
    print(r)


def before_dot(s):
    d = int(s)
    if d == 0:
        return
    if d != 0:
        print(tran_int(d) + '元', end='')


def tran_int(d):
    '''整数翻译: 0直接翻译为空'''
    if d == 0:  # 0
        r = ''
    elif d < 10:  # 1-9
        r = w1[d]
    elif d < 20:  # 10-19
        r = '拾' + tran_int(d % 10)
    elif d < 100:  # 20-99
        r = tran_int(d // 10) + '拾' + tran_int(d % 10)
    elif d < 1000:  # 100-999
        if d % 100 >= 20:  # 十位2以上
            r = tran_int(d // 100) + '佰' + tran_int(d % 100)
        elif d % 100 >= 10:  # 十位1
            r = tran_int(d // 100) + '佰一' + tran_int(d % 100)
        elif d % 10 > 0:  # 十位0个位非0
            r = tran_int(d // 100) + '佰零' + tran_int(d % 10)
        else:  # 整百
            r = tran_int(d // 100) + '佰'
    elif d < 10000:  # 1000 - 9999
        if d % 1000 >= 100:  # 1100~9999
            r = tran_int(d // 1000) + '千' + tran_int(d % 1000)
        elif d % 10 // 100 == 0:  # 百位为0
            if d % 100 != 0:  # 十个位不全为0
                r = tran_int(d // 1000) + '千零' + tran_int(d % 100)
            else:
                r = tran_int(d // 1000) + '千'
    elif d < pow(10, 8):  # 1万到1亿
        if d % 10000 // 1000 == 0 and d % 1000 != 0:  # 千位0,但个十百不全是0
            r = tran_int(d // 10000) + '万零' + tran_int(d % 1000)
        else:
            r = tran_int(d // 10000) + '万' + tran_int(d % 10000)
    elif d < pow(10, 12):  # 1亿到万亿
        if d % pow(10, 8) // pow(10, 7) == 0 and d % pow(10, 8) != 0:  # 千万位为0,千万以下不权威
            r = tran_int(d // pow(10, 8)) + '亿零' + tran_int(d % pow(10, 8))
        else:
            r = tran_int(d // pow(10, 8)) + '亿' + tran_int(d % pow(10, 8))

    return r


def tran_rmb(m1, m2):
    print('人民币',end='')
    before_dot(m1)
    after_dot(m2)


if __name__ == '__main__':
        m1, m2 = input().split('.')
        tran_rmb(m1, m2)

全部评论

相关推荐

03-26 22:27
已编辑
中南大学 Java
点赞 评论 收藏
分享
02-28 17:01
门头沟学院 C++
俊朗的铁猫希望被捞:兄弟如果只想搞钱的话,你这个简历最适合的其实是辅导机构做dai写啥的真的特别赚
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务