# Thread: Number to Word (Billions)

1. ## Question

Originally Posted by Perspective
Here's an idea.
Code:
```/* returns string representation of number in ones column. Ex. 3 -> three */
string ones(int num);

/* returns string representation of number in tens column. Ex. 3 -> thirty */
string tens(int num);```
Now break the numbers down into the hundreds form for each significant place (billions, millions, thousands, hundreds). Use the % operator to get each value and the above functions to get the string representations of those values. Then stick them all together with the terms for each significant place.

Code:
```ex:
31, 821
-> 031
-> 0 -> ""
-> 3 -> thirty
-> 1 -> one
Thousand
-> 821
-> 8 -> eight (using ones column name since it's the same as hundreds)
Hundred
-> 21 -> 2 -> twenty
-> 1 -> one

Result: Thirty one thousand eight hundred twenty one.```
I've been trying to understand this but i can't fully come up with
a full idea. I mean, i can't understand:
"string ones(int num);" or how to use this.
and also, how to separate the Billions, millions, thousands and ones colums, and the decimal.
Hope you could help more, THANKS!

2. here's the program that's already working.
hope you could help on shortening it.

Code:
```#include<stdio.h>
#include<string.h>

char numin[100];

int pesonum = 0;
int centnum = 0;
int decpoint = 0;
int xcounter = 0;
int ycounter = 0;

void onesplace(char);
void othercase(char);
void tensplace(char);
void hundreds(char);
void thousands(char);
void tenthou(char);
void hundredthou(char);
void millions(char);
void tenmill(char);
void hundredmill(char);
void billions(char);
void tenbill(char);
void hundredbill(char);

int main (void)
{
clrscr();
printf("enter amount: ");
fgets(numin,100,stdin);

do
{

for(xcounter = 0; xcounter<=strlen(numin); xcounter++)
{
if(numin[xcounter] == ',')
{
for(ycounter = xcounter; ycounter<strlen(numin); ycounter++)
{
numin[ycounter] = numin[ycounter+1];
}
}
else
continue;

}

}

while(strpbrk(numin,","));

for(xcounter = 0; xcounter<=strlen(numin); xcounter++)
{
if(numin[0] == '0')
{
for(ycounter = 0; ycounter<strlen(numin); ycounter++)
{
numin[ycounter] = numin[ycounter+1];
}
}
else
break;
}

if(numin[0] == '.')
{
printf("zero ");
}

else if(strlen(numin)>18)
{
printf("Number exceeds limit!");
exit(0);
}

for(xcounter=0; xcounter<strlen(numin); xcounter++)
{
if (numin[xcounter] == '.')
{
pesonum = xcounter - 1;
centnum = xcounter + 1;
decpoint = 1;
break;
}

else
{
pesonum = strlen(numin) - 2;
decpoint = 0;
}
}

switch(pesonum+1)
{
case 12:
hundredbill(numin[pesonum-11]);
case 11:
tenbill(numin[pesonum-10]);
case 10:
if (numin[pesonum-10] == '1')
{
othercase(numin[pesonum-9]);
printf("billion ");
}

else
{
billions(numin[pesonum-9]);
printf("billion ");
}
case 9:
hundredmill(numin[pesonum-8]);
case 8:
tenmill(numin[pesonum-7]);
case 7:
if (numin[pesonum-7] == '1')
{
othercase(numin[pesonum-6]);
printf("million ");
}

else if ((numin[pesonum-7] != '0')||(numin[pesonum-8] != '0')||(numin[pesonum-6] != '0'))
{
millions(numin[pesonum-6]);
printf("million ");
}
case 6:
hundredthou(numin[pesonum-5]);
case 5:
tenthou(numin[pesonum-4]);
case 4:
if (numin[pesonum-4] == '1')
{
othercase(numin[pesonum-3]);
printf("thousand ");
}

else if ((numin[pesonum-4] != '0')||(numin[pesonum-5] != '0')||(numin[pesonum-3] != '0'))
{
thousands(numin[pesonum-3]);
printf("thousand ");
}
case 3:
hundreds(numin[pesonum-2]);
case 2:
tensplace(numin[pesonum-1]);
case 1:
if (numin[pesonum-1] == '1')
{
othercase(numin[pesonum]);
}

else
{
onesplace(numin[pesonum]);
}
}

if(decpoint==1)
{
if((numin[centnum] =='0') && (numin[centnum+1] =='0'))
{
printf("pesos and zero centavos");
}

else if((numin[strlen(numin)-3] == '.') && (numin[strlen(numin)-2] == '0'))
{
printf("pesos and zero centavos");
}

else
{
printf("pesos and ");

tensplace(numin[centnum]);

if (numin[centnum] == '1')
{
othercase(numin[centnum+1]);
}

else
{
onesplace(numin[centnum+1]);
}

printf("centavos");
}
}

else if(decpoint==0)
{
printf("pesos");
}

getch();

return 0;

}

void othercase(char onesplace)
{
switch(onesplace)
{
case '0':
{
printf("ten ");
break;
}
case '1':
{
printf("eleven ");
break;
}
case '2':
{
printf("twelve ");
break;
}
case '3':
{
printf("thirteen ");
break;
}
case '4':
{
printf("fourteen ");
break;
}
case '5':
{
printf("fifteen ");
break;
}
case '6':
{
printf("sixteen ");
break;
}
case '7':
{
printf("seventeen ");
break;
}
case '8':
{
printf("eighteen ");
break;
}
case '9':
{
printf("nineteen ");
break;
}
}
}

void onesplace(char onesplace)
{

switch(onesplace)
{
case '0':
{
break;
}
case '1':
{
printf("one ");
break;
}
case '2':
{
printf("two ");
break;
}
case '3':
{
printf("three ");
break;
}
case '4':
{
printf("four ");
break;
}
case '5':
{
printf("five ");
break;
}
case '6':
{
printf("six ");
break;
}
case '7':
{
printf("seven ");
break;
}
case '8':
{
printf("eight ");
break;
}
case '9':
{
printf("nine ");
break;
}
}
}

void tensplace(char tensplace)
{
switch(tensplace)
{
case '1':
{
break;
}
case '2':
{
printf("twenty ");
break;
}
case '3':
{
printf("thirty ");
break;
}
case '4':
{
printf("forty ");
break;
}
case '5':
{
printf("fifty ");
break;
}
case '6':
{
printf("sixty ");
break;
}
case '7':
{
printf("seventy ");
break;
}
case '8':
{
printf("eighty ");
break;
}
case '9':
{
printf("ninety ");
break;
}
}
}

void hundreds(char hundreds)
{
if (hundreds != '0')
{
onesplace(hundreds);
printf("hundred ");
}
}

void thousands(char thousands)
{
if (thousands != '0')
{
onesplace(thousands);
}
}

void tenthou(char tenthou)
{
if (tenthou != '0')
{
tensplace(tenthou);
}
}

void hundredthou(char hundredthou)
{
if (hundredthou != '0')
{
hundreds(hundredthou);
}
}

void millions(char thousands)
{
if (thousands != '0')
{
onesplace(thousands);
}
}

void tenmill(char tenmill)
{
if (tenmill != '0')
{
tensplace(tenmill);
}
}

void hundredmill(char hundredmill)
{
if (hundredmill != '0')
{
hundreds(hundredmill);
}

}

void billions(char billions)
{
if (billions != '0')
{
onesplace(billions);
}

}

void tenbill(char tenbill)
{
if (tenbill != '0')
{
tensplace(tenbill);
}
}

void hundredbill(char hundredbill)
{
if (hundredbill != '0')
{
hundreds(hundredbill);
}
}```

3. Out of curiosity, why do you have a mix of english and spanish?

4. actually, my code is in pure english.
maybe the "spanish" part you're referring to is the name
of the currency which is "peso". and in our country we use centavos instead of cents.

5. To shorten your code, you need to understand the relationship between the column the digit is in, and the word that is associated with it.

5 = 5 one's
12 = 1 ten and 2 one's
148 = 1 hundred forty eight

1,234,567, or 1,856,723,941, it makes no difference. Each column is associated with a given string:

Code:
```words[][] = {
{ "and" },   //or blank
{ "one" },
{ "teen"},  //ten is ok, but teen is perhaps better
{ "hundred" }
{ "thousand" },
//etc.
};```
You'll need special logic to handle 10, 11, & 12, etc. What you must avoid is handling every digit, in every column, as a "special case", requiring it's own code. You want to abstract the logic enough to cover several general cases, with the same code, in a loop.

This has all been explained in previous posts, with snippets of code, as well. You may want to re-read some of them for a better understanding.

I don't know that you can "modify" your code to shorten it - it's a piano you've built, I'm sorry to say. You can't just remove a few keys and say "Look! It's the doghouse I meant to build, at least."

If you have time, I'd say throw this "piano" away, and try it again, but you may not have that kind of time. In that case, turn it in, and try to understand where you went wrong, for the next assignment.

I don't believe we can explain the way it should have been done, any better in the next three pages, than we have in the last three pages.