学英语(20200312)

题目描述

Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:
如22:twenty two,123:one hundred and twenty three。
说明:
数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;
输出格式为twenty two;
非法数据请返回“error”;
关键字提示:and,billion,million,thousand,hundred。
方法原型:public static String parse(long num)

输入描述:
输入一个long型整数
输出描述:
输出相应的英文写法

示例1
输入
2356
输出
two thousand three hundred and fifty six

题解:

思路:通过将位数和数字分离来操作,位和数字分别用字典保存去做匹配,然后用列表来分别存储匹配到的位和数字,最后输出的时候做拼接
如2356,位数有千和百,数字有2、3、56

# coding=utf-8

#定义全局变量
wei = []
number = []
numdict = {'1': 'one', '2': 'two', '3': 'three', '4': 'four', '5': 'five', '6': 'six', '7': 'seven',
           '8': 'eight', '9': 'nine', '10': 'ten', '11': 'eleven', '12': 'twelve', '13': 'thirteen',
           '14': 'fourteen', '15': 'fifteen', '16': 'sixteen', '17': 'seventeen', '18': 'eighteen',
           '19': 'nineteen', '20': 'twenty', '30': 'thirty', '40': 'forty', '50': 'fifty', '60': 'sixty',
           '70': 'seventy', '80': 'eighty', '90': 'ninety'}
weidict = {'1000000000': 'billion', '1000000': 'million', '1000': 'thousand', '100': 'hundred'}
s = ""

#对数字做匹配判断
def numPanDuan(num):
    if num > 20 and num < 100:
        number.insert(0, numdict[str(num % 10)])
        number.insert(0, numdict[str(num // 10 * 10)])
    if num <= 20 and num > 0:
        number.insert(0, numdict[str(num)])

if __name__ == '__main__':
    num = int(input())
    if num>=0 and num<1000000000:
    	#0单独处理
        if num == 0:
            s = 'zero'
        else:
            for k in weidict.keys():
            	#对位进行匹配判断
                if num // int(k) > 0:
                    wei.insert(0, weidict[k])
                    if num // int(k) >= 100:
                        if num % int(k) == 0:
                            num = num // int(k)
                            continue
                        else:
                            numPanDuan(num % int(k))
                    else:
                        number.insert(0, numdict[str(num // int(k))])
                        num = num % int(k)
            numPanDuan(num)

        print(number)
        print(wei)
        #输出时字符串拼接处理
        if len(wei)==0:
            for i in number:
                s+=' '+i
        else:
            for i in range(len(wei)):
                s+=number[len(number)-1-i]+' '+wei[len(wei)-1-i]+' '
            s+=' and '
            for i in range(len(number)-len(wei)):
                s+=number[i]+' '
    else:
        s="error"
    print(s)

说明:
本题的代码其实还有bug,目前只能实现简单的数字,后续会做修改,仅提供一个参考的思路
目前本King的代码能力只能按上述方式实现,后续有更好的方案,欢迎各位指点,也会不定期做修改~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值