I don't see how converting the numbers to floats helps, especially as floats are less accurate than ints and you risk losing data. You need to parse the number from left to right, you can do that by comparing it with 10^n (int mask=1; while (mask<num) num*=10; then you know that mask is the first power of ten higher than num), or you can sprintf the number to a string and use strlen to determine the order of magnitude of each digit. Or you can divide the number by certain powers of 10 to determine how many of that group there are (e.g. 15000 divide by 1000 to determine how many thousands: 15 (once you've removed millions and above)).

The main difficulty I've found when trying to do this is how to put the complete number together. Here are some examples:

101: One hundred and one

1101: One thousand one hundred and one

1001: One thousand and one

10050: Ten thousand and fifty

10150: Ten thousand one hundred and fifty

110150: One hundred and ten thousand one hundred and fifty

Those ands look almost random! Is there an and after "ten thousand" or not??? Why "one hundred and fifty", but not "fifty and three"? What's with four and twenty for 24?

A simple program might phrase these without ands, for example "One hundred ten thousand one hundred fifty" but that doesn't read right and might be misinterpreted as a list of three numbers: 100, 10100, 50.

But you're right, this is tedious and some of the rules only apply if there are numbers of lower magnitude, c.f. 1000, 1001, 1101, after determining the first digit is "one thousand" you can't just stick down "and" without seeing what comes next and how large it is.