原题链接:蓝桥杯基础练习VIP-数的读法
解题思路:
只需要单独考虑每四位的一个读法即可
就是不停地分类分类分类
参考代码:
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:
break0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复