Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 정수에서 영어 단어로


번호가 있다고 가정합니다. 숫자는 0에서 231 – 1 사이의 모든 것이 될 수 있습니다. 숫자를 단어로 변환해야 합니다. 따라서 숫자가 512와 같으면 결과는 512가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • less_than_20과 같은 목록을 정의하십시오. 이것은 1에서 19까지의 모든 단어를 포함합니다.

  • 10과 같은 또 다른 배열은 10, 20, 30 등을 최대 90까지 저장할 수 있습니다.

  • 수천, 백만 및 10억을 수용할 수 있는 또 다른 어레이

  • helper()라는 하나의 함수를 정의하면 n

  • n이 0이면 빈 문자열을 반환합니다.

  • 그렇지 않으면 n <20이면 less_than_20[n] + 공백을 반환합니다.

  • 그렇지 않으면 n <100일 때 tens[n/10] + 공백 + helper(n mod 10)

    를 반환합니다.
  • 그렇지 않으면 less_than_20[n/100] + "Hundred" + 도우미를 반환합니다(n mod 100)

  • 기본 방법에서 다음을 수행하십시오.

  • num이 0이면 "0"을 반환합니다.

  • ans :=빈 문자열, i :=0

  • 숫자> 0

    동안
    • num mod 1000이 0이 아니면

      • ans :=helper(num mod 1000) + 수천[i] + 공백 + ans

      • 숫자 :=숫자 / 1000

  • 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

class Solution(object):
   less_than_20 = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen",
"Nineteen"]
   tens = ["","Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]
   thousands = ["", "Thousand", "Million", "Billion"]
   def numberToWords(self, num):
      if num == 0:
         return "Zero"
      ans = ""
      i = 0
      while num > 0:
         if num % 1000 != 0:
            ans = self.helper(num % 1000) + Solution.thousands[i] + " " + ans
         i += 1
         num //= 1000
      return ans.strip()
   def helper(self, n):
      if n == 0:
         return ""
      elif n < 20:
         return Solution.less_than_20[n] + " "
      elif n < 100:
         return Solution.tens[n//10] + " " + self.helper(n % 10)
      else:
         return Solution.less_than_20[n // 100] + " Hundred " + self.helper(n % 100)

ob = Solution()
print(ob.numberToWords(512))
print(ob.numberToWords(7835271))

입력

512
7835271

출력

Five Hundred Twelve
Seven Million Eight Hundred Thirty Five Thousand Two Hundred Seventy One