首页 > 其他分享 >HJ95 人民币转换

HJ95 人民币转换

时间:2023-04-25 14:23:14浏览次数:35  
标签:10 转换 len four presentV leng HJ95 append 人民币

思路:

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

已知转换可分为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))

 

标签:10,转换,len,four,presentV,leng,HJ95,append,人民币
From: https://www.cnblogs.com/tanyuanqing/p/17352462.html

相关文章

  • MFC-ScreenToClient屏幕坐标转换为客户区坐标
     win32APIPOINTpoint={20,50};HWNDhWnd=GetSafeHwnd();BOOLb=::ScreenToClient(hWnd,&point);//屏幕坐标转换为客户区坐标/*参数1:HWNDhWnd窗口句柄参数2:LPPOINTlpPoint屏幕坐标点函数成功后,保......
  • kettle从入门到精通 第十六课 kettle 映射 (子转换)02
    1、上节讲的子映射里面只有一个转换(类似一个java类里面只有一个公共方法),本次讲解的有两个,实际上可以有任意多个(一个java类里面有多个公共方法)。两个转换分别计算x+y和x*y。 2、命名参数:定义一些变量传递到子转换里面。 3、输入1)Availableinputs可以点击加号增加多个输入,......
  • [C#]中String、String[]、List<string>相互转换及string成员substring、split简单使用
    一、相互转换1.String>String[]Strings="a,b,c,d,e";String[]sArray=s.Split(',');2.String[]>Stringstring[]sArray={"a","b","c","d","e"};strings=String.Join(",......
  • 自动类型转换
    所以说,只要找到第一个计算的表达式,将其乘1ll,整个式子就是longlong的了。还有就是有符号和无符号乘法的时候一定要注意:int(-1)*(unsignedint)(10000)将无法得到-10000!(除非是unsignedshort)......
  • Swift Codable协议实战:快速、简单、高效地完成JSON和Model转换!
    前言Codable是Swift4.0引入的一种协议,它是一个组合协议,由Decodable和Encodable两个协议组成。它的作用是将模型对象转换为JSON或者是其它的数据格式,也可以反过来将JSON数据转换为模型对象。Encodable和Decodable分别定义了encode(to:)和init(from:)两个协议......
  • 数制转换
    问题:给定一个M进制的数x,实现对x向任意一个非M进制的数转换。分析:十进制转其他进制,整数部分除以基数取余数(取余数的方向从后往前),小数部分乘以基数取整数(取整方向从前往后);其他进制转十进制:按权展开相加;其他进制转其他进制:先转为十进制再转为其他进制。十六进制0到F,故是字符数组,因此......
  • TypeScript 学习笔记 — 数组常见的类型转换操作记录(十四)
    获取长度lengthtypeLengthOfTuple<Textendsany[]>=T["length"];typeA=LengthOfTuple<["B","F","E"]>;//3typeB=LengthOfTuple<[]>;//0取第一项FirstItemtypeFirstItem<Textendsany[]>......
  • celery传参时的对象转换
    遇到一个有趣的问题,celerydelay传入SSH的对象时,报错ObjectoftypeSSHisnotJSONserializable,分析一下就是只能传json的数据。把所有传入的数据都转成json。1、因为我传递的是对象,所以要把对象转成json,所以我就自定义了一个JSONEncoderclassMyEncoder(json.JSONEncoder):......
  • 如何通过C#/VB.NET代码将PowerPoint转换为HTML
    利用PowerPoint可以很方便的呈现多媒体信息,且信息形式多媒体化,表现力强。但难免在某些情况下我们会需要将PowerPoint转换为HTML格式。因为HTML文档能独立于各种操作系统平台(如Unix,Windows等)。并且它可以加入图片、声音、动画、影视等内容,还能从一个文件跳转到另一个文件,与世界各地......
  • python工具模块介绍-time 时间访问和转换
    快速入门In[1]:importtime#获取当前时间In[25]:time.strftime("%Y-%m-%d_%H-%M-%S",time.localtime())Out[25]:'2018-06-17_20-05-36'#停顿0.5秒In[26]:time.sleep(0.5)简介功能:时间访问和转换。相关模块:datetime 标准模块。calendar标准模块。下面介......