一、题目及要求
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
二、输入输出样例
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
三、代码
1.代码思路
(1)主要思路是编写四位数的读法。因为比如说给一个八位数78965678,读作七Q八B九S六W五Q六B七S八,其实就是两个四位数'七Q八B九S六'和'五Q六B七S八',中间用了一个'W'连接起来。所以整个程序的主要思路将个、十、百、千位放入一个列表,万、十万、百万、千万放入一个列表,亿单独放入一个列表。
(2)然后考虑一些细节上的处理,主要是对于零的处理。这里主要利用了列表的长度以及flag变量。
a.四位数情形
如果按照上面的分法,得到的列表长度为4,有两种可能,一种是实打实的四位数,一种是千位为0的四位数(或者千、百位为0,或者千、百、十位为0,或者千、百、十、个位均为零)。
实打实的四位数比较好编写,此处不赘述。
如果是千位为0,(1)百、十、个位均为零,则此时这个列表的读法就是空字符串'';(2)否则千位读'零'。此外,如果千位为0,要将flag变量置零,这样如果百位也是零,就可以根据flag变量判断百位的零是否要读。如果千位不为0,读'×千'。
如果百位为0,(1)flag=0,百位读法为空字符串(2)flag=1,百位读作‘零'。如果百位不为零,读作’×百'。
十位、个位的处理可能略由不同,但基本类似。
b.三位数、两位数、个位数情形
按照上面的分法,如果列表长度为3,则是实打实的三位数,即百位肯定不为0。列表长度为2、1同理。此处就采取了简单的分类讨论,没有技术含量XD,关键在于讨论要完整。
(3)最后就是用‘亿’或者‘万’把各列表的读法连接起来就ok啦。
2.代码
def fun(lst1): ##lst1是一个由整数组成的数组
num=['a','b','c','d','e','f','g','h','i','j']
flag=1 #高位没有零
if len(lst1)==4:
if lst1[0]=='0':
if lst1[1]=='0' and lst1[2]=='0' and lst1[3]=='0':
return ''
else:
qianwei='a'
flag=0 #高位已经有零
else:
qianwei=num[int(lst1[0])]+'Q'
if lst1[1]=='0' and lst1[2]=='0' and lst1[3]=='0':
return qianwei
if lst1[1]=='0':
if flag==0:
baiwei=''
else:
baiwei='a'
flag=0
else:
baiwei=num[int(lst1[1])]+'B'
flag=1
if lst1[2]=='0' and lst1[3]=='0':
return qianwei+baiwei
if lst1[2]=='0':
if flag==0:
shiwei=''
else:
shiwei='a'
flag=0
else:
shiwei=num[int(lst1[2])]+'S'
flag=1
if lst1[2]=='0' and lst1[3]=='0':
return qianwei+baiwei+shiwei
if lst1[3]=='0':
gewei=''
else:
gewei=num[int(lst1[3])]
flag=1
return qianwei+baiwei+shiwei+gewei
elif len(lst1)==3:
baiwei=num[int(lst1[0])]+'B'
if lst1[1]=='0' and lst1[2]=='0':
return baiwei
elif lst1[1]=='0' and lst1[2]!='0':
return baiwei+'a'+num[int(lst1[2])]
elif lst1[1]!='0' and lst1[2]=='0':
return baiwei+num[int(lst1[1])]+'S'
else:
return baiwei+num[int(lst1[1])]+'S'+num[int(lst1[2])]
elif len(lst1)==2:
shiwei=num[int(lst1[0])]+'S'
if lst1[1]=='0':
return shiwei
else:
return shiwei+num[int(lst1[1])]
else:
return num[int(lst1[0])]lst=input()
if len(lst)<=4:
print(fun(lst))
elif len(lst)>4 and len(lst)<=8:
lst1=lst[len(lst)-4:]
lst2=lst[:len(lst)-4]
print(fun(lst2)+'W'+fun(lst1))
else:
lst1=lst[len(lst)-4:]
lst2=lst[len(lst)-8:len(lst)-4]
lst3=lst[:len(lst)-8]
print(fun(lst3)+'Y'+fun(lst2)+'W'+fun(lst1))
四、运行结果