一、题目及要求

输入一个整数(位数不超过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))

四、运行结果

货币转换1python123 货币转换的python程序怎么写_分类讨论