首页 > 试题广场 >

人民币转换

[编程题]人民币转换
  • 热度指数:82439 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

考试题目和要点:

1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。

2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。

3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如6007.14,应写成“人民币陆仟零柒元壹角肆分“。
4、10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”
5、十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”



输入描述:

输入一个double数



输出描述:

输出人民币格式

示例1

输入

151121.15

输出

人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
示例2

输入

1010.00

输出

人民币壹仟零拾元整
cn_nums1 = ["", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
cn_nums2 = ["", "拾", "佰", "仟", "万"]


def num_to_cn(s):
    s1 = int(s)
    res = ""
    flag = 1    
    if s1>0:
        while flag > 0:
            n = len(str(s1))
            if n > 1:
                i = s1 // (10 ** (n - 1))
                s1 = s1 % (10 ** (n - 1))
                res += cn_nums1[i] + cn_nums2[n - 1]
                if 0 < s1 < 10 ** (n - 2):
                    res += "零"
            else:
                res += cn_nums1[s1]
                flag = 0
    return res

s1, s2 = input().split(".")
# 小数部分转大写
if s2 == "00":
    res2 = "整"
elif s2[0] == "0":
    res2 = cn_nums1[int(s2[1])] + "分"
elif s2[1] == "0":
    res2 = cn_nums1[int(s2[0])] + "角"
else:
    res2 = cn_nums1[int(s2[0])] + "角" + cn_nums1[int(s2[1])] + "分"
# 整数部分转大写
if len(s1) < 5:
    res1 = num_to_cn(s1)
else:
    res1 = num_to_cn(s1[:-4]) + "万" + num_to_cn(s1[-4:])
res1 = res1.replace("壹拾", "拾")

if res1=='':
    print('人民币'+res2)
else:
    print('人民币'+res1+'元'+res2)

发表于 2024-10-10 01:41:13 回复(0)
import sys
def fun(x,n):   #四位四位处理
    a = '零、壹、贰、叁、肆、伍、陆、柒、捌、玖、亿、元、角、分、整'.split('、')
    b = ['仟','佰','拾','']
    c = ['角','分']
    y = ''
    if n >0:  #整数部分
        for i in range(4):  
              
            if x[i] == 0:
                if i != 3:
                    if i!= 0 and x[i-1]!=0: #不是第一位并且后一位不为0
                        if i!= 2:        
                            y += '零'
                        else:
                            if x[i+1] != 0:
                                y += '零'
            
            elif x[i] != 0:
                if i == 2 and x[i] == 1:   #处理10情况                 
                    y +=  b[i]
                else:
                    y += a[x[i]] +b[i]
        
        if n == 1:
            y += '元'
        elif n == 2:
            y += '万'
        elif n == 3:
            y += '亿'
    else:#小数部分
        if x[0] == x[1] == 0:
            y = '整'
            
        else:
            for i in range(2):
                if x[i] != 0:
                    y += a[x[i]] + c[i]
        
    return y

while True:
    try:
        x = input()
        x1,x2= list(map(int,x[:-3])),list(map(int,x[-2:]))
        yy = ''
        
        if len(x1)%4 != 0:
            x1 = [0]*(4-len(x1)%4) + x1
        x11 = [x1[i:i+4] for i in range(0,len(x1),4)]
        # print(x11)
       
        for i in range(len(x11)):
            yy += fun(x11[i],len(x11)-i)
        if yy == '元':    # 整数为0
            yy = ''
        elif yy [-2:] == '零元':  #个位为0
            yy = yy[:-2] + '元'       
        
        yy = '人民币' + yy + fun(x2,-1)
        print(yy)
      
    except:
        break	


发表于 2024-05-25 18:11:15 回复(0)
while 1:
    try:
        dic1 = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
        dic2 = ['元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万']
        dic3 = ['角','分']
        w = '人民币'
        n,x = list(map(str,input().split('.')))
        m = len(n)
        for i in range(m):#整数部分
            if i+1 == m: #最后一位个位数的处理,得到其具体数字后再后面加元字,零元需后续处理
                w += dic1[int(n[i])]
                w += '元'
            elif n[i] == '0' and n[i+1] == '0':#十万以上的数字接千不用加“零”
                if dic2[m-(i+1)] == '万':
                    w += '万'
                    continue
            else:
                w += dic1[int(n[i])]
                w += dic2[m-(i+1)]
        w = w.replace('壹拾','拾')
        w = w.replace('拾零','拾')
        w = w.replace('零拾','零')
        w = w.replace('零佰','零')
        w = w.replace('零仟','零')

        if int(x) == 0:#小数部分
            w += '元整'
        else:
            for i in range(2):
                if x[i] == '0':#角和分谁为0 ,则可以不写出来
                    w += ''
                else:
                    w += dic1[int(x[i])]
                    w += dic3[i]
        w = w.replace('零元','')
        w = w.replace('元元','元')
        print(w)

    except:
        break

编辑于 2024-01-04 16:41:35 回复(0)
import re

list1 = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
list2 = ['亿','仟','佰','拾',"万", "仟", "佰", "拾", "元", ".", "角", "分"]
# 输入一个数
num = input()
n = len(num)
str1 = ""
for i in range(-n, 0, 1):
    if i != -3:
        str1 += list1[int(num[i])] + list2[i]
#下面就是特殊情况的处理
str2 = re.sub("壹拾", "拾", str1)
str3 = re.sub("零角零分", "整", str2)
str4 = re.sub("零元", "元", str3)
str5 = re.sub("零角", "", str4)
str6 = re.sub("零分", "", str5)
str7 = re.sub("(零.)+", "零", str6)
str8 = re.sub("^元", "", str7)
print('人民币'+str8)

发表于 2023-12-24 23:17:11 回复(0)
写了得有2个小时
diction=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖','拾']
dict2=['元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟']
dict2=dict2[::-1]
dict3=['角','分']
fasd='123456789'
num1,num2=input().split('.')
num3=int(num1)
num4=int(num2)
res='人民币'
length=len(num1)
for i in num1:
    num1=num1.replace(i,diction[int(i)])
for i in num2:
    num2=num2.replace(i,diction[int(i)])
num1=list(num1)
num2=list(num2)
for i in range(-1,-length-1,-1):
    num1[i]+=dict2[i]
for j in range(2):
    num2[j]+=dict3[j]
num1=''.join(num1)
num1=num1.replace('壹拾','拾')

import re
num1=re.sub('零[拾佰仟万亿]','零',num1)
num1=re.sub('零+','零',num1)
num1=re.sub('零元','元',num1)

num2=''.join(num2)
num2=num2.replace('零角','').replace('零分','')
if num2=='':
    num2='整'
if num3==0:
    print(res+num2)
else:
    print(res+num1+num2)

           

发表于 2023-11-09 22:05:49 回复(0)
import re
input1, input2 = input().split(".")
num = [0,1,2,3,4,5,6,7,8,9]
hanz = "零、壹、贰、叁、肆、伍、陆、柒、捌、玖".split("、")
num2hanz = dict(zip(num, hanz))
result = "人民币"

def siwei(abcd,left_is_zero=True):
    ret = ""
    a = int(abcd[0])
    if a == 0:
        ret += "零"
    else:
        ret += num2hanz[a] + "仟"
    b = int(abcd[1])
    if b == 0:
        ret += "零"
    else:
        ret += num2hanz[b] + "佰"
    c = int(abcd[2])
    if c == 0:
        ret += "零"
    else:
        ret += num2hanz[c] + "拾"
    d = int(abcd[3])
    if d == 0:
        ret += ""
    else:
        ret += num2hanz[d]  
    ret = ret.replace("壹拾","拾")
    ret = re.sub("零{2,}","零",ret)
    if left_is_zero:
        ret = ret.strip("零")
    return ret
newstr = input1.zfill(12)
left_is_zero = True

tmp = newstr[:4]
result += siwei(tmp,left_is_zero) 
if int(tmp)!= 0:
    result += "亿"
    left_is_zero = False

tmp = newstr[4:8]
result += siwei(tmp,left_is_zero) 
if int(tmp)!= 0:
    result += "万"
    left_is_zero = False

tmp = newstr[8:12]
result += siwei(tmp,left_is_zero) 

if result != "人民币":
    result += "元"

def jf(ab):
    a = int(ab[0])
    b = int(ab[1])
    ret = ""
    if a:
        ret += num2hanz[a] + "角"
    if b:
        ret += num2hanz[b] + "分"
    return ret

if input2 == "00":
    result += "整"
else:
    result += jf(input2)

print(result)



发表于 2023-10-18 22:45:38 回复(0)
a= input()
# print(a)

l1 = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
def trans(a):
    a = a.split('.')
    s,res = '',''
    if len(a)>1 and a[0] != '0':
        p1 = a[0][::-1]
        # print(p1)
        for i in p1:
            s = l1[int(i)]+s
        if len(s)>1:
            s = s[:-1]+'拾'+s[-1:]
            if len(s)>3:
                s = s[:-3]+'佰'+s[-3:]
                if len(s)>5:
                    s = s[:-5]+'仟'+s[-5:]
                    if len(s)>7:
                        s = s[:-7]+'万'+s[-7:]
                        if len(s)>9:
                            s = s[:-9]+'拾'+s[-9:]
        if len(a[1]) == 1 or a[1][1] == '0':
            s2 = l1[int(a[1][0])]+'角'
        else:
            s2 = l1[int(a[1][0])]+'角'+l1[int(a[1][1])]+'分'
        res = '人民币'+s+'元'+s2
        return res
    elif len(a) ==1:
        p1 = a[0][::-1]
        # print(p1)
        for i in p1:
            s = l1[int(i)]+s
        if len(s)>1:
            s = s[:-1]+'拾'+s[-1:]
            if len(s)>3:
                s = s[:-3]+'佰'+s[-3:]
                if len(s)>5:
                    s = s[:-5]+'仟'+s[-5:]
                    if len(s)>7:
                        s = s[:-7]+'万'+s[-7:]
                        if len(s)>9:
                            s = s[:-9]+'拾'+s[-9:]
        res = '人民币'+s+'元整'
        return res
    else:
        if len(a[1]) == 1 or a[1][1] == '0':
            s2 = l1[int(a[1][0])]+'角'
        else:
            s2 = l1[int(a[1][0])]+'角'+l1[int(a[1][1])]+'分'
        res = '人民币'+s2
        return res

exp = trans(a)

exp = (exp.replace('壹拾','拾')).replace('零角','')
print(exp)
发表于 2023-07-07 21:14:28 回复(1)
while True:
    try:
        n, m = input().split(".")
        cn = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
        dw = ["元", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万", "亿", "拾亿", "佰亿", "仟亿"]
        fdw = ["角", "分"]
        w = "人民币"
        n_len = len(n)
        for i in range(n_len):
            if i + 1 == n_len:
                if n[i] == "0":
                    w += "元"
                else:
                    w += cn[int(n[i])] + dw[n_len - i - 1]
            elif n[i] == "0" and n[i + 1] == "0":
                if dw[n_len - i - 1] == "万":
                    w += "万"
                continue
            else:
                w += cn[int(n[i])] + dw[n_len - i - 1]
        w = w.replace("零仟万", "零")
        w = w.replace("零佰万", "零")
        w = w.replace("零万", "零")
        w = w.replace("零仟", "零")
        w = w.replace("零佰", "零")
        w = w.replace("零拾万", "零")
        w = w.replace("壹拾万", "拾")
        w = w.replace("壹拾", "拾")
        for i in range(2):
            if m == "00":
                w += "整"
                break
            else:
                w += cn[int(m[i])] + fdw[i]
        w = w.replace("零角", "")
        w = w.replace("零分", "")
        wan_num = w.count("万")
        if wan_num > 1:
            w = w.replace("万", "", wan_num - 1)
        yi_num = w.count("亿")
        if yi_num > 1:
            w = w.replace("亿", "", yi_num - 1)
        w = w.replace("亿万", "亿")
        print(w)
    except:
        break
发表于 2023-05-25 22:44:14 回复(0)
面向测试用例编程,没看到比我还笨的
k = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
v = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
d = dict(zip(k, v))
# print(d)
a, b = input().split('.')
res = '人民币'
if len(a) == 1:
    if a != '0':
        res += d[a] + '元'
elif len(a) == 2:
    if a == '10':
        res += '拾' + '元'
    elif a[0] == '1':
        res += '拾' + d[a[1]] + '元'
    elif a[1] == '0':
        res += d[a[0]] + '拾' + '元'
    else:
        res += d[a[0]] + '拾' + d[a[1]] + '元'
elif len(a) == 3:
    if a[1] == '0' and a[2] == '0':
        res += d[a[0]] + '佰' + '元'
    elif a[1] == '0':
        res += d[a[0]] + '佰' + d[a[1]] + d[a[2]] + '元'
    elif a[2] == '0':
        res += d[a[0]] + '佰' + d[a[1]] + '拾' + '元'
    else:
        res += d[a[0]] + '佰' + d[a[1]] + '拾' + d[a[2]] + '元'
if b == '00':
    res += '整'
elif b[0] == '0':
    res += d[b[1]] + '分'
elif b[1] == '0':
    res += d[b[0]] + '角'
else:
    res += d[b[0]] + '角' + d[b[1]] + '分'
print(res)


发表于 2023-05-04 00:00:04 回复(3)
面向测试编程……有没有0挺麻烦
import sys

key = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90]
val = ['壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾', '拾壹', '拾贰', '拾叁', '拾肆', '拾伍', '拾陆', '拾柒', '拾捌', '拾玖', '贰拾', '叁拾', '肆拾', '伍拾', '陆拾', '柒拾', '捌拾', '玖拾']
dic = dict(zip(key, val))
s = input()
num = float(s)
yi = int(num // 10 ** 8)
wan = int(num // 10000 % 10 ** 4)

def thousands(i):
    output = ''
    # 千位
    if i // 1000 != 0:
        output += dic[i // 1000] + '仟'
    else:
        output += '零'
    # 百位
    if i % 1000 // 100 != 0:
        output += dic[i % 1000 // 100] + '佰'
    else:
        # 对于百位连续的零不用补零
        if output[-1] == '零':
            pass
        else:
            output += '零'
    # 对于100以内,0不做处理,小于10的看前面是否有零
    if i % 100 < 10:
        if i % 100 != 0:
            if output[-1] == '零':
                pass
            else:
                output += '零'
            output += dic[i % 100]
    else:
        if i % 100 in key:
            output += dic[i % 100]
        else:
            # 即十位和个位都不为0
            output += dic[i % 100 // 10] + '拾' + dic[i % 10]
    # 考虑到从个位开始都是0,这样会有一个不必要的‘零’
    if output[-1] == '零':
        output = output[:-1]   
    return output
    
output = ''
# 整数部分
if yi > 0:
    output += thousands(yi) + '亿'
if wan > 0:
    output += thousands(wan) + '万'
output += thousands(int(num // 1 % 10000)) + '元'
# 小数部分
s = s[-2:]
if s == '00':
    output += '整'
else:
    if s[0] != '0':
        output += dic[int(s[0])] + '角'
    if s[1] != '0':
        output += dic[int(s[1])] + '分'
# 考虑到开头可能会有1个不必要的0,或者整数位为0
if output[0] == '零'&nbs***bsp;output[0] == '元':
    output = output[1:]
print('人民币' + output)


发表于 2023-04-14 16:29:27 回复(0)
num1, num2 = input().split('.')

d = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']

def fun2(num):
    # 处理小数点后俩位 
    res = ""
    if num == '00':
        res = '整'   
    if num[0] != '0':
        res = d[int(num[0])] + '角'
    if num[1] != '0':
        res += d[int(num[1])] + '分'  
    return res  

def fun1(num):
    # 处理小说点 前面的数字 
    num  = int(num) 
    yi = 100000000
    wan = 10000
    qian = 1000
    bai = 100 
    shi = 10 

    # print(num)
    if num >= yi:
        # 大于亿的数 
        return fun1(num // yi) + '亿' + fun1(num % yi)
    elif num  >=  wan:
        # 大于万的数
        return fun1(num // wan) + '万' + fun1(num % wan)
    elif  num >= qian:
        # 大于千 的数 
        # 判断是否 加 0 
        if num % qian  <= 99:
            return fun1(num // qian) + '仟零' + fun1(num % qian)
        else:
            return fun1(num // qian) + '仟' + fun1(num % qian) 

    elif num >= bai:
        # 判断是否加0 
        if num % bai <= 9 :
            return fun1(num // bai) + '佰零' + fun1(num % bai)
        else:
            return fun1(num // bai ) + '佰' + fun1(num % bai)

    elif num > shi and num < 20 :
        return  '拾' + d[num-10]
    elif num >= 20:
        return d[num // shi] + '拾' + fun1(num % shi)
    else:
        return d[num]

r1 = fun1(num1)
r2 = fun2(num2)

# print(r2)

if r1 != '零':
    r1 += '元'
else:
    r1 = ''

print("人民币%s%s" % (r1, r2))


发表于 2023-03-11 10:18:51 回复(0)
# -*- coding: utf-8 -*-
"""
{看了各位小伙伴,貌似或多或少有点问题,或者说仅限通过测试,没起到统用性,并且我觉得这不应该涉及用计算方式,所以整理了如下方法,
纯粹的字符列表的映射关系,排除掉一些特殊情况也许是为了可读性,在拼接的时候有反转情况。另外“壹拾”写成“拾”貌似有争议,
参考网页公开使用版本并没有去掉“壹”,还有就是小数点后有零的情况也是有争议(注释处已带标记???),也许是两种读法吧,也不纠结它了。
欢迎小伙伴们任意抽测,我测试过10位数以下都没问题,想来算法是ok的,所以可以是任意数值}
"""

import re

class NumToRMB:
    def __init__(self, num):
        if "." in num:
            self.left, self.right = num.split(".")
        else:
            self.left, self.right = num, ""
        self.a, self.b = divmod(len(self.left), 4)
        self.x = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
        # self.x = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
        self.p = ["仟", "佰", "拾", "元"]  # 公共部分
        self.y = ["垓", "京", "兆", "亿", "万", "元"]  # 整数进位部分  扩展时向此列表前添加即可  百度百科 “数字”
        # self.y = ['古戈尔普勒克斯', '古戈尔', '无觉', '无想', '无感', '无知', '无数', '无等', '无边', '大数', ' 无量', '不可思议', '那由他', '阿僧祗', '恒河沙', '极', '载', '正', '涧', '沟', '穰', '秭', '垓', '京', ' 兆', '亿', '万', '元']  # 整数进位部分  扩展时向此列表前添加即可
        self.z = ["角", "分", "厘", "毛"]  # 小数部分
        # self.z = ["角", '分', '厘', '毛', '糸', '忽', '微', '纤', '沙', '尘', '埃', '渺', '漠', '模糊', '逡巡', '须臾', '瞬息', '弹指', '刹那', '六德', '虚空', '清净', '阿赖耶', '阿摩罗', '涅槃寂静']  # 小数部分

    def get_li(self, left: str) -> list:
        li = []
        if left[: self.b] != "":
            li.append(left[: self.b])
        for i in range(self.a):
            s = left[self.b:][(i * 4): (i * 4) + 4]
            li.append(s)
        return li

    def numToRMB_1(self, num: str, p: list, y: str) -> str:
        tmp = []
        l = len(num)
        index = p[-l:]  # 只取后 l 位真实值需要用到的单位 p = ['仟', '佰', '拾', '元']
        y = "" if y == "元" else y
        for i, j in zip(num, index):
            if i == "0"&nbs***bsp;(i != "0" and j == "元"):  # 对应位置为 0 不写入单位,并且默认末尾为 “元” 时也不记录,方便后面组合时拼接进位单位
                tmp.append(self.x[int(i)])
            else:
                tmp.append(self.x[int(i)] + j)
        res = "".join(tmp)
        res = re.sub(r"0{2,}|零{2,}", self.x[0], res)  # 单个片段间有 相邻 2 个以上合并为 1 个
        if res[-1] == "0"&nbs***bsp;res[-1] == "零":
            res = re.sub(r"0$|零$", f"{y}零", res)  # 特殊情况 0万 0亿,此时读作 万0 亿0,所以要对其反向
            res = re.sub(r"0{2,}|零{2,}", self.x[0], res)  # 特殊情况 反向后可能也会出现有 相邻 2 个以上再次合并为 1 个
        else:
            res = res + y  # 拼接进位单位
        return res

    def resultLeft(self, left: str, p: list, y: list) -> str:
        l0 = []
        li = self.get_li(left)  # 对 left 分组,每后四位一组
        y = [y[-i] for i in range(len(li), 0, -1)]  # 调整 整数进位部分单位 y = ['垓', '京', '兆', '亿', '万', '元']
        for i, j in zip(li, y):
            res = self.numToRMB_1(i, p, j)  # 每组调用公共单位 p = ['仟', '佰', '拾', '元']
            l0.append(res)
        res = "".join(l0)
        res = re.sub(r"0{2,}|零{2,}", self.x[0], res)  # 有相邻 2 个以上合并为 1 个
        for i in range(len(y) - 2):
            # a, b = y[-3 - i], y[-2 - i]     # 倒着取便于递归替换,按先生成先替换,更合理
            a, b = y[0], y[i + 1]  # 顺着取替换,也合理
            res = re.sub(f"{a}" + r"(0|零){0,1}" + f"{b}", a, res)  # 特殊情况  兆亿 亿万 ... 兆0亿 亿0万 ... 组合,需要循环替换保留进位最高位
        res = re.sub(r"0$|零$", "", res) + "元"  # 特殊情况 0 结尾
        res = re.sub(r"^元$|^元$", "零元", res)  # 特殊情况 0元
        res = re.sub(r"(1|壹)拾", f"拾", res)  # 特殊情况 只为过测试,貌似有争议 ???
        return res

    # right = ['1','01','11','001','011','101','111','0001','0011','0111','0101','0101','1111','1001', '1101', '1011','00000001']
    def numToRMB_2(self, num: str, li: list) -> str:
        tmp = []
        try:
            while num[-1] == "0":  # 1000 情况,末尾有至少一个 0
                num = num[:-1]
        except:
            pass
        for i, j in zip(num, li):
            if i == "0":  # 对应位置数值为 0 时不加单位
                j = ""
            tmp.append(self.x[int(i)] + j)
        res = "".join(tmp)
        res = re.sub(r"0{2,}|零{2,}", f"{self.x[0]}", res)  # 0001 情况,合并 0
        # res = re.sub(r'(0|零){2,}', f'{self.x[0]}', res)  # 上下两种写法
        res = re.sub(r"^0|^零", "", res)  # 特殊情况 只为过测试,貌似有争议 ???
        return res

    def main(self):
        resultLeft = self.resultLeft(self.left, self.p, self.y)
        resultRight = self.numToRMB_2(self.right, self.z)
        if self.right == ""&nbs***bsp;int(self.right) == 0:
            return resultLeft + "整"
        elif int(self.left) == 0:  # 0.01 情况
            return resultRight
        return resultLeft + resultRight

# nums = ['151121.15', '101010.00',  '0.85', '0.40', '0.01', '4.00', '0.00', '532.00', '6007.14', '10', '110.00', '101001111', '30105000.00', '000123,340.00']
def check(num):
    num = num.replace(",", "")  # 去掉不相关字符
    num = re.sub(r"^0+", "", num)
    num = re.sub(r"^\.", "0.", num)
    try:
        flage = re.match(r"^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$", num)
        if flage.group(0) == num:
            return num
    except:
        pass

num = input()
num = check(num)
result = NumToRMB(num).main()
print("人民币" + result)

发表于 2023-01-17 15:52:09 回复(3)
moneystr = input()
money = float(moneystr)
word1 = "零壹贰叁肆伍陆柒捌玖"
print("人民币", end="")
isling = False  # 当前数字是不是零
p_index = moneystr.index(".")  # 小数点的位置
fd_num = p_index
for i in range(fd_num):
    # 如果上一个数是零, 而当前数不是零, 那么打印"零"
    if moneystr[i] > "0" and isling == True:
        print(word1[0], end="")
    # 如果当前数是零
    if moneystr[i] == "0":
        isling = True
    # 如果当前数不是零
    if moneystr[i] != "0":
        isling = False
        position = fd_num - i  # 与小数点相距的位置, 1个位2十位...
        if position%4 == 0:
            print(word1[int(moneystr[i])] + "仟", end="")
        if position%4 == 3:
            print(word1[int(moneystr[i])] + "佰", end="")
        if position%4 == 2:
            if moneystr[i] != "1":
                print(word1[int(moneystr[i])], end="")
            print("拾", end="")
        if position%4 == 1:
            print(word1[int(moneystr[i])], end="")
        if position == 5:
            print("万", end="")
        elif position == 9:
            print("亿", end="")
if money >= 1:
    print("元", end="")
# 整数或非整数
if money%1 == 0:
    print("整", end="")
else:
    if moneystr[p_index+1] != "0":
        print(word1[int(moneystr[p_index+1])], "角", sep="", end="")
    if moneystr[p_index+2] != "0":
        print(word1[int(moneystr[p_index+2])], "分", sep="", end="")

发表于 2022-11-28 17:09:21 回复(0)
num = input().split('.')
num_left = int(num[0])
num_right = num[1]

lists = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","佰","仟","万","亿"]
word = []

def after_point(num):
    if int(num_right[0])>0 and int(num_right[1])>0:
        word.append(lists[int(num_right[0])] + '角' + lists[int(num_right[1])] + '分')
    elif int(num_right[0])>0:
        word.append(lists[int(num_right[0])] + '角')
    else:
        word.append(lists[int(num_right[1])] + '分')
    return word

def ten(num):
    if num > 10 and num % 10 == 0:
        word.append(lists[num//10] + lists[10])
    elif num//10 > 1 and num > 10:
        word.append(lists[num//10] + lists[10] + lists[num%10])
    elif num // 10 == 1 and num > 10:
        word.append(lists[10] + lists[num % 10])
    elif num < 10:
        word.append(lists[num%10])
    elif num == 10:
        word.append(lists[10])

def hundred(num):
    if num >= 100:
        if num % 100 == 0:
            word.append(lists[num//100] + lists[11])
        elif num % 100 > 10:
            word.append(lists[num//100] + lists[11])
            ten(num%100)
        else:
            word.append(lists[num//100] + lists[11] + lists[0])
            ten(num%100)
    else:
        ten(num)
    return word

def thousand(num):
    if num >= 1000:
        if num % 1000 == 0:
            word.append(lists[num//1000] + lists[12])
        elif num % 1000 >= 100:
            word.append(lists[num//1000] + lists[12])
            hundred(num%1000)
        else:
            word.append(lists[num//1000] + lists[12] + lists[0])
            ten(num%1000)
    elif num >= 100:
        hundred(num)
    else:
        ten(num)

a = num_left % 10000 #千位及以下
b = num_left // 10000 % 10000#千万位及以下
d = num_left // 10000 // 10000 #亿位

if d > 0:
    thousand(d)
    word.append(lists[14])
    if len(str(b)) < 4:
        word.append(lists[0])
if b > 0:
    thousand(b)
    word.append(lists[13])
if a > 0:
    thousand(a)

if int(num_left) > 0 and int(num_right) > 0:
    word.append('元')
    after_point(num_right)
    print('人民币' + ''.join(word))
elif int(num_right) > 0:
    after_point(num_right)
    print('人民币' + ''.join(word))
else:
    word.append('元整')
    print('人民币' + ''.join(word))

发表于 2022-11-23 17:01:32 回复(0)