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))