fork(2) download
  1. one_digit = ["không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"]
  2. ten_unit = {
  3. **{ 0: ("linh", ["", " một", " hai", " ba", " bốn", " năm", " sáu", " bảy", " tám", " chín"]),
  4. 1: ("mười", ["", " một", " hai", " ba", " bốn", " lăm", " sáu", " bảy", " tám", " chín"]) },
  5. **{ x: (one_digit[x] + " mươi", ["", " mốt", " hai", " ba", " tư", " lăm", " sáu", " bảy", " tám", " chín"]) for x in range(2, 9+1) }
  6. }
  7.  
  8. hundreds = [x + " trăm" for x in one_digit]
  9. bigger = ["", " nghìn", " triệu", " tỉ", " nghìn tỉ", " triệu tỉ", " tỉ tỉ"]
  10.  
  11.  
  12. def read_class(s):
  13. n = int(s)
  14. if len(s) == 1:
  15. return one_digit[n]
  16. elif len(s) == 2:
  17. u = ten_unit[n//10]
  18. return u[0] + u[1][n%10]
  19. else: # len(s) == 3
  20. if s == '000':
  21. return ''
  22. elif s.endswith('00'): # x00
  23. return hundreds[n//100]
  24. else: # xyz
  25. u = ten_unit[(n//10)%10]
  26. return hundreds[n//100] + ' ' + u[0] + u[1][n%10]
  27.  
  28.  
  29. while True:
  30. try:
  31. s = input()
  32. except:
  33. break
  34.  
  35. s = s.lstrip('0').rstrip('\n')
  36. classes = []
  37. for i in range(len(s)-1, 1, -3):
  38. classes.append(s[i-2:i+1])
  39.  
  40. if len(s) % 3 != 0:
  41. classes.append(s[:len(s)%3])
  42.  
  43. res = ''
  44. for i in range(len(classes)):
  45. named_class = read_class(classes[i])
  46. if named_class != '':
  47. res = named_class + bigger[i] + (' ' * (res != '')) + res
  48.  
  49. print(s, res)
  50.  
Success #stdin #stdout 0.03s 9332KB
stdin
1
2018
34000000000000
stdout
1 một
2018 hai nghìn không trăm mười tám
34000000000000 ba mươi tư nghìn tỉ