Python编程day24
题目:币值转换分数 20作者 陈建海单位 浙江大学输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
题目:币值转换
分数 20
作者 陈建海
单位 浙江大学
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
思路分析:
首先:把输入的数字分成三种不同的情况来判断,过亿的,过万不过亿的和不过万的,每四个数一组判断
代码:
letter1={0:"a",1:"b",2:"c",3:"d",4:"e",5:"f",6:"g",7:"h",8:"i",9:"j"}
letter2={10:"S",100:"B",1000:"Q"}
#返回n对应的数值位,比入123返回100,用于解决后面单位
def calculate(n):
return 10**(len(str(n))-1)
def fac(n):
if n!=0:
#记录要返回的英文
letter=""
temp=calculate(n)
while n!=0:
#得到最高位的值
flag=n//temp
if flag in letter1:
if flag!=0:
letter+=letter1[flag]
if temp in letter2:
letter+=letter2[temp]
else:
#处理中间多个零的情况
if flag==0 and letter[-1]!='a':
letter+=letter1[flag]
n%=temp
temp//=10
return letter
else:
#为了解决输入为0
return letter1[0]
number=input()
n=len(number)
letter=""
#过亿
if n==9:
y=int(number[0])
letter=letter1[y]+"Y"
if int(number)%100000000!=0:
#不过万的为四个数都为0
if int(number)%10000==0:
w=int(number[1:5])
letter+=fac(w)+"W"
#过万不过亿的四个数都为0
elif int(number)%10000==int(number)%100000000:
k=int(number[5:])
letter+=fac(k)
#都不为0
else:
w=int(number[1:5])
letter+=fac(w)+"W"
k=int(number[5:])
letter+=fac(k)
#不过亿过万
elif 4<n<9:
w=int(number[0:-4])
letter+=fac(w)+"W"
if int(number)%10000!=0:
k=int(number[-4:])
if 1<=k<1000:
#处理中间多个零的情况
letter+=letter1[0]+fac(k)
else:
letter+=fac(k)
#不过万
elif n<=4:
k=int(number)
letter+=fac(k)
print(letter)
更多推荐

所有评论(0)