题目描述
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的代码能力只能按上述方式实现,后续有更好的方案,欢迎各位指点,也会不定期做修改~