The pattern behind English number words is grouping by digits. You say "One Hundred Twenty Three" for a group, then attach a scale word: Thousand, Million, or Billion.
So the approach is: peel off digits at a time from right to left. For each group, convert it into words using a helper that handles hundreds, tens, and ones. Then prepend the appropriate scale word based on which group you're processing.
The tricky part is handling zeros. If a group is , you skip it entirely. You don't say "Zero Thousand". You also need lookup arrays for the special cases: numbers through have unique names, and multiples of from to have their own names.