Leetcode #273 整数转换英文表示

39 篇文章 0 订阅
7 篇文章 0 订阅

将数字分成三个数字一小组的list

P.S.

  1. 代码还需要改进;
  2. 以后的代码都会写备注;

以下是Python 的源代码:

import numpy
import math
class Solution(object):
    def numberToWords(self, num):
        """
        将整个数字分成三个一小组的list
        :type num: int
        :rtype: str
        """

        num0=num    ##用来求每个小组中的元素,消耗元素
        num1=num    ##用来求一组数可以组成几个三位小组,消耗元素
        trib_num=0  ##小组数
     
        for i in range(4): ##判断有几个小组
            if num1>0:
                trib_num+=1  
            num1=int(num1/1000)
            
        trible=[]   ##小组内的具体元素
        num_str=[]  ##最后输出的字符串

        if num==0:
            num_str='Zero'
        else:
            for i in range(trib_num):   ##小组内的具体元素
                trible.append(num0 % 1000)
                num0=int(num0/1000)
                
            for i in range(trib_num):   ##小组内循环
                
                x=trible[trib_num-1-i]
                hund_num=int(x/100)     ##百位
                decm_num=int(x%100/10)  ##十位
                sing_num=x%10           ##个位

                ## 此位是否都为零
                if hund_num==0 and decm_num==0 and sing_num==0:
                    pass

                ## 不为零
                else:
                    
                    ## 百位有数字输出
                    if hund_num>0:
                        y=sing(hund_num)
                        num_str.append(y)
                        num_str.append(' ')
                        num_str.append('Hundred')
                        
                        ## 如果百位后有元素的话需要加上空格
                        if decm_num>0 or sing_num>0 or i<trib_num-1:
                            num_str.append(' ')

                    ## 十位有大于1数字输出
                    if decm_num>1:
                        y=decm(decm_num)
                        num_str.append(y)

                        ## 有个位的话需要加上空格和个位
                        if sing_num>0:
                            num_str.append(' ')
                        y=sing(sing_num)
                        num_str.append(y)

                        ## 如果个位后还有元素的话需要加空格
                        if i<trib_num-1:
                            num_str.append(' ')

                    ## 如果十位的元素为1
                    elif decm_num==1:
                        y=tens(sing_num)
                        num_str.append(y)

                        ## 如果十位后还有元素
                        if i<trib_num-1:
                            num_str.append(' ')

                    ## 只有一个个位
                    elif sing_num>0:
                        y=sing(sing_num)
                        num_str.append(y)

                        ##如果个位后还有元素
                        if i<trib_num-1:
                            num_str.append(' ')

                    ## 对小组的位进行定位    
                    y=thou(trib_num-1-i)
                    num_str.append(y)

                    ## 如果小组后面还有元素则加空格
                    x=pow(1000,(trib_num-1-i))
                    if (num%x)>0:
                        num_str.append(' ')
                    

        ## 拼接字符串
        str0=''
        str0=str0.join(num_str)

##        return 2000%1000
        return str0
            

def thou(thou_num):
    thou_str=''
    if thou_num==0:
       thou_str=''
    if thou_num==1:
       thou_str='Thousand'
    if thou_num==2:
       thou_str='Million'
    if thou_num==3:
       thou_str='Billion'
    return thou_str

def decm(decm_num):
    decm_str=''
    if decm_num==2:
       decm_str='Twenty'
    elif decm_num==3:
       decm_str='Thirty'
    elif decm_num==4:
       decm_str='Forty'
    elif decm_num==5:
       decm_str='Fifty'
    elif decm_num==6:
       decm_str='Sixty'
    elif decm_num==7:
       decm_str='Seventy'
    elif decm_num==8:
       decm_str='Eighty'
    elif decm_num==9:
       decm_str='Ninety'
    return decm_str
    
def tens(tens_num):
    tens_str=''
    if tens_num==0:
       tens_str='Ten'
    if tens_num==1:
       tens_str='Eleven'
    if tens_num==2:
       tens_str='Twelve'
    if tens_num==3:
       tens_str='Thirteen'
    if tens_num==4:
       tens_str='Fourteen'
    if tens_num==5:
       tens_str='Fifteen'
    if tens_num==6:
       tens_str='Sixteen'
    if tens_num==7:
       tens_str='Seventeen'
    if tens_num==8:
       tens_str='Eighteen'
    if tens_num==9:
       tens_str='Nineteen'
    return tens_str

def sing(sing_num):
    sing_str=''
    if sing_num==1:
       sing_str='One'
    if sing_num==2:
       sing_str='Two'
    if sing_num==3:
       sing_str='Three'
    if sing_num==4:
       sing_str='Four'
    if sing_num==5:
       sing_str='Five'
    if sing_num==6:
       sing_str='Six'
    if sing_num==7:
       sing_str='Seven'
    if sing_num==8:
       sing_str='Eight'
    if sing_num==9:
       sing_str='Nine'
       
    return sing_str

num = 1000010
output=Solution().numberToWords(num)
print(output) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值