273.integer-to-english-words.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. func numberToWords(num int) string {
  2. if num == 0 {
  3. return "Zero"
  4. }
  5. return ntowRecurse(num)
  6. }
  7. func ntowRecurse(num int) (res string) {
  8. if num/1000000000 != 0 {
  9. res += ntowRecurse(num/1000000000) + getWord(0) + getWord(1000000000) + getWord(0) + ntowRecurse(num%1000000000)
  10. } else if num/1000000 != 0 {
  11. res += ntowRecurse(num/1000000) + getWord(0) + getWord(1000000) + getWord(0) + ntowRecurse(num%1000000)
  12. } else if num/1000 != 0 {
  13. res += ntowRecurse(num/1000) + getWord(0) + getWord(1000) + getWord(0) + ntowRecurse(num%1000)
  14. } else if num/100 != 0 {
  15. res += ntowRecurse(num/100) + getWord(0) + getWord(100) + getWord(0) + ntowRecurse(num%100)
  16. } else if 20 <= num {
  17. res += getWord(num-num%10) + getWord(0) + ntowRecurse(num%10)
  18. } else if num != 0 {
  19. res = getWord(num)
  20. }
  21. return strings.Trim(res, " ")
  22. }
  23. func getWord(num int) string {
  24. switch num {
  25. case 1:
  26. return "One"
  27. case 2:
  28. return "Two"
  29. case 3:
  30. return "Three"
  31. case 4:
  32. return "Four"
  33. case 5:
  34. return "Five"
  35. case 6:
  36. return "Six"
  37. case 7:
  38. return "Seven"
  39. case 8:
  40. return "Eight"
  41. case 9:
  42. return "Nine"
  43. case 10:
  44. return "Ten"
  45. case 11:
  46. return "Eleven"
  47. case 12:
  48. return "Twelve"
  49. case 13:
  50. return "Thirteen"
  51. case 14:
  52. return "Fourteen"
  53. case 15:
  54. return "Fifteen"
  55. case 16:
  56. return "Sixteen"
  57. case 17:
  58. return "Seventeen"
  59. case 18:
  60. return "Eighteen"
  61. case 19:
  62. return "Nineteen"
  63. case 20:
  64. return "Twenty"
  65. case 30:
  66. return "Thirty"
  67. case 40:
  68. return "Forty"
  69. case 50:
  70. return "Fifty"
  71. case 60:
  72. return "Sixty"
  73. case 70:
  74. return "Seventy"
  75. case 80:
  76. return "Eighty"
  77. case 90:
  78. return "Ninety"
  79. case 100:
  80. return "Hundred"
  81. case 1000:
  82. return "Thousand"
  83. case 1000000:
  84. return "Million"
  85. case 1000000000:
  86. return "Billion"
  87. default:
  88. return " "
  89. }
  90. }