HJ95 人民币转换

思路:

人民币转换规则较多,需要根据要求和测试调整判断语句。

已知转换可分为4位数一组,且每四位数转换规则一致。考虑迭代方法。

迭代如何缩小规模,字符串切片方法。字符串每次切片四位,需要一个跟踪参数,因此使用while循环,c作为跟踪参数。代码中c最大为3,最高可实现12位数字转换,需要实现更大数字转换,只需要增加数值c判断的代码即可。

 1 #因要容纳所有规模的人民币,所以要采用递归,减小规模一步步解决的方法。
 2 #测试数据:30010020,3010000,12314568941.12
 3 n=input().split('.')
 4 t=n[0]
 5 c=len(t)
 6 d={0:"",1:"",2:'',3:'',4:'',5:'',6:'',7:'',\
 7 8:'',9:'',10:'',100:'',1000:'',10000:'','y':'亿','yu':'',
 8 'j':'','f':'','z':''}
 9 l=['人民币']
10 def four(t,c):#十万以上的数目,两0输出一“零”   
11     if c==0:        
12         presentV=int(t)     
13         leng=len(str(presentV))     
14         if leng>=4 and presentV!=0:
15             l.append(d[presentV//1000])
16             l.append(d[1000])
17             presentV=presentV-presentV//1000*1000 
18             temp=leng
19             leng=len(str(presentV))
20             if temp-leng>=2:
21                 l.append(d[0])
22         if leng>=3 and presentV!=0:
23             l.append(d[presentV//100])
24             l.append(d[100])
25             presentV=presentV-presentV//100*100
26         if leng>=2 and presentV!=0:
27             if presentV//10==0:
28                 l.append(d[presentV//10])
29             elif presentV//10==1 :
30                 l.append(d[10])
31             else:
32                 l.append(d[presentV//10])
33                 l.append(d[10])
34             presentV=presentV-presentV//10*10
35         if presentV!=0:
36             l.append(d[presentV])
37             presentV=presentV-presentV
38         #if presentV==0:
39 #递归,用c作为判别条件递归。            
40     while c>=1:# while循环缩小规模,引入c作为缩小规模参数。        
41         if c==3:# 通过c调整可转换的数字规模,这里给出c==3,可转换最大数字规模时“亿”
42                 # 也就是12位,可通过提高c的数值,实现更大规模数字转换。
43                 # 放在if c==3之前,如  if c==4:
44                #                         four(t[-4*c:(-4*c+4)],0) 
45                #                         l.append(‘万亿’)
46             four(t[-4*c:(-4*c+4)],0)  
47             l.append(d['y'])
48         elif c==2:
49             four(t[-4*c:(-4*c+4)],0) 
50             l.append(d[10000])
51         else:
52             four(t[-4*c:],0)
53             l.append(d['yu'])
54         c-=1 
55 def two(t):
56     presentV=int(t)
57     if presentV%10==0:
58         l.append(d[presentV//10])
59         l.append(d['j'])
60         presentV=0
61     if presentV//10==0 and presentV!=0:
62         l.append(d[presentV])
63         l.append(d['f'])
64         presentV=0
65     if presentV!=0:
66         l.append(d[presentV//10])
67         l.append(d['j'])
68         presentV=presentV-presentV//10*10
69         l.append(d[presentV])
70         l.append(d['f'])
71 c=1
72 leng=len(n[0])
73 if int(n[0])!=0:
74     if leng>9:
75         c=3
76     elif leng>=5:
77         c=2
78     four(n[0],c)
79 if len(n)>1:
80     if int(n[1])==0:
81         l.append(d['z'])
82     else:
83         two(n[1])
84 else:
85     l.append(d['z'])
86 print("".join(i for i in l))

 

posted @ 2023-04-25 14:11  Aneverforget  阅读(80)  评论(0编辑  收藏  举报