解题思路:
只需要单独考虑每四位的一个读法即可

就是不停地分类分类分类
参考代码:

def func():
    global ans,mzero1,mzero2,mzero3,mfour
    for i in range(len(ss)):
        #这两个if是用来判断是否添加万和亿的
        if i==4 and mfour==1:
            ans=ans+'wan '
        if i==8 and mfour==2:
            ans=ans+'yi '
        #接下来的语句其实就是每四位进行一个读法的转换 每四位除了单位不一样 读法是一样的
        if (i+1)%4==1 and int(ss[i])!=0:
            ans+=dic[int(ss[i])]+' '
        elif (i+1)%4==1 and int(ss[i])==0:
            mzero1=True
        elif (i+1)%4==2 and int(ss[i])!=0:
            if int(ss[i])==1:
                ans+='shi '
            else:
                ans+='shi '+dic[int(ss[i])]+' '
        elif (i+1)%4==2 and int(ss[i])==0:
            mzero2=True
        elif (i+1)%4==3 and int(ss[i])!=0:
            if int(ss[i])==1:
                if mzero1==False and mzero2==True:
                    ans+='ling bai '
                else:
                    ans+='bai '
            else:
                if mzero1==False and mzero2==True:
                    ans+='ling bai '+dic[int(ss[i])]+' '
                else:
                    ans+='bai '+dic[int(ss[i])]+' '
        elif (i+1)%4==3 and int(ss[i])==0:
            mzero3=True
        elif (i+1)%4==0:
            if int(ss[i])!=0:
                if int(ss[i])==1:
                    if (mzero1==False and mzero2==True and mzero3==True) or (mzero1==True and mzero2==False and mzero3==True) or (mzero1==False and mzero2==False and mzero3==True):
                        ans+='ling qian '
                    else:
                        ans+='qian '
                else:
                    if (mzero1==False and mzero2==True and mzero3==True) or (mzero1==True and mzero2==False and mzero3==True) or (mzero1==False and mzero2==False and mzero3==True):
                        ans+='ling qian '+dic[int(ss[i])]+' '
                    else:
                        ans+='qian '+dic[int(ss[i])]+' '
            else:
                if not (mzero1==True and mzero2==True and mzero3==True):
                    ans+='ling '
            mfour+=1
            mzero1=False
            mzero2=False
            mzero3=False
while True:
	try:
	    x=int(input())
	    ss=str(x)[::-1]
	    ans=''
	    dic={0:'ling',1:'yi',2:'er',3:'san',4:'si',5:'wu',6:'liu',7:'qi',8:'ba',9:'jiu'}
	    #用来记录零的个数 区分0的作用是ling还是shi、bai、qian
	    mzero1=False
	    mzero2=False
	    mzero3=False
	    mfour=0
	    func()
	    lst=ans.strip().split(' ')
	    lst.reverse()
	    ans=' '.join(lst)
	    print(ans)
	except:
		break


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论