7-23 币值转换(比较容易理解的做法)

输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出“cWdQbBai”元。

输入格式:

输入在一行中给出一个不超过9位的非负整数。

输出格式:

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB
num = 'abcdefghij'  # 便于通过数字0123456789对应到abcd...

n = input()
res = ''  # result简写
length = len(n)
pos = length  # pos表示当前的位数是第几位,比如个位pos对应1

# 第一遍处理,遇到数字就转换为对应的字母
while pos > 0:
    res += num[int(n[length - pos])]  # length - pos 表示当前位数在字符串n中的下标
    if int(n[length - pos]) != 0:
        match pos % 4:
            case 2:
                res += 'S'
            case 3:
                res += 'B'
            case 0:
                res += 'Q'
    if pos == 9:  # 如果该位是亿位,加上‘Y’
        res += 'Y'
    if pos == 5:  # 如果该位是万位,加上‘W’
        res += 'W'
    pos -= 1

# 除去结尾多余的“a” 比如:700 除去之前为'hBaa' 实际上应该直接是'hB'
# 但是如果输入的就是‘0’ 不做处理
while res[-1] == 'a' and res != 'a':
    res = res[:-1]

# 同理,除去"万"前面多余的“a” 比如:1001111 应为一百万一千
while res.count('aW') > 0:
    res = res.replace('aW', 'W')

# 处理连续的“aa” 比如: '1001' 未处理前为’bQaab‘,实际上应该是’bQab‘
while res.count('aa') > 0:
    res = res.replace('aa', 'a')

# 如果万位均为0,则需要去除"W" 比如:100000000”一亿“ 处理前为”bYW“ 实际应该是”bY“
if res.count('YW') > 0:
    res = res.replace('YW', 'Y')

print(res)  # 输出最终的结果

代码里有注释,应该比较好理解。

要积极向上哦^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值