user2204993
user2204993

Reputation: 41

converting numbers to word c++

#include <iostream> //including header files#include <string>
#include <string>

using namespace std;


//string array declared
string units[3][11] = {{"One","Two","Three", "Four", "Five", "Six","Seven","Eight", "Nine","Ten"},
{"Eleven", "Twelve", "Thirteen","Fourteen", "Fifteen", "Sixteen", "Seventeen","Eighteen", "Nineteen"},
{"Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety", "", ""}};


//function defs
void func6  (int unsigned long i);
void func5 (int unsigned long i);
void func4 (int unsigned i);
void func3 (int unsigned i);
void func2 (int unsigned i);
void func1 (int unsigned t);
void func (int unsigned i);

int main() //main body of fcn
{
long int num; //declaring integers

int j=1;

 while (j==1) //start of while loop
  {
        cout << "Enter a number between -2 billion and 2 billion " << endl; //prompts user for i/p and stores it
        cin >> num;

        if ((num < -2000000000) || (num > 2000000000)) //exits program if not within these limits
        {
            cout << "Number Invalid " << endl;
            return 0;
        }
        else
        {
            func(num);  //call functions
            func1(num);
            func2(num);
            func3(num);
            func4(num);
            func5(num);
//            func6(num);
        }
    }
}


/*void func6 (int unsigned long i) //start of fcn5
{
    int unsigned long t; //declares integer t


    if (i>9999&&i<100000) //if within these limits statement executes
    {
        t=i%1000; //works out remainder
        i=i/1000; //works out new i value
        cout << units[1][i-11] << " Thousand "; //prints out result whilst looking up table


        if (t<10) //if remainder within limits calls function
        func(t);
        else if (t>=10&&t<20)
        func1(t);
        else if (t>19&&t<=100)
        func2(t);
        else if (t>99&&t<1000)
        func3(t);


    }
}
*/



void func5 (int unsigned long i) //start of fcn5
{
    int unsigned long t; //declaring integer
    if (i>9999&&i<100000) // if value within these limits then execute
    {
        t=i%10000; //works out remainder
        i=i/10000; //works out new value of i
        cout << units[2][i-2] << " Thousand "; //prints out result whilst looking up table

        if (t<10) //calls function if remainder within these limits
        func(t);
        else if (t>=10&&t<20)
        func1(t);
        else if (t>=20&&t<100)
        func2(t);
        else if (t>=100&&t<1000)
        func3(t);

    }
}



void func4 (int unsigned i) //start of function 4
{
    int unsigned t; //declares integer
    if (i>=1000&&i<10000) //if within these limits execute fcn
    {
        t=i%1000; //works out remainder
        i=i/1000; //works out new value of i
        cout << units[0][i-1] << " Thousand "; //prints out result whilst looking up table

        if (t<10) //calls function if remainder within limits
        func(t);
        else if (t>=10&&t<20)
        func1(t);
        else if (t>=20&&t<100)
        func2(t);
        else if (t>=100&&t<1000)
        func3(t);


    }
}


void func3 (int unsigned i) //start of fcn 3
{
    int unsigned t; //delcares integer
    if (i>=100&&i<1000) //statement executes if within limits
    {
        t=i%100; //works out remainder
        i=i/100; //works out new value
        cout << units[0][i-1] << " Hundred "; //prints out result whilst looking up table

        if (t<10)   //if remainder within these limits calls previous functions
        func(t);
        else if (t>=10&&t<20)
        func1(t);
        else if (t>=20&&t<100)
        func2(t);
    }
}


void func2(int unsigned i) //start of fcn2
{
    int unsigned t; //declares integer


    if (i>=20&&i<100) //if i within limits statement executes
    {
            t=i%10; //works out remainder
            i=i/10; //works out new i value
            cout << units[2][i-2] ; //prints result out whilst looking up table


            if (t < 10) //if remainder within these limits calls function
            func(t);
    }
}


void func1(int unsigned i) //start of func1
{
    int unsigned t; //declares integer
    if (i>10&&i<20) //if i within these limits statement executes
    {
        t=i%10; //works out remainder
        cout << units[1][t-1] << endl; //prints out value whilst looking up table
    }
}


void func(int unsigned t) //start of fcn
{
    if (t<=10) //if statement less than 10 executes
    {
        cout << " " << units[0][t-1] << endl; //prints out result whilst looking up table.
    }
}

Right I have written this code out and it works for most numbers but came to a confusion whilst trying to print out 10000, 11000, 12000,...90000, 91000 etc. Its stuff do with the remainders and the value of i. I cannot figure out what to do been stuck on it all day. Any ideas? Also now when I enter a number it returns it but then crashes.

Upvotes: 0

Views: 3841

Answers (2)

user995502
user995502

Reputation:

Original post was terrible. Sorry. Now that I read your question properly, I can give you some preliminary version. but you have to modify it a little bit to tune it up.

string bases[6] = {"", "ten", "hundred", "thousand", "ten thousand", "million"};


string digit_to_word ( int n )
{
 if(n == 1)
   return "one";
 if(n == 2)
   return "two";
 if(n == 3)
   return "three";
 if(n == 4)
   return "four";

}

string number_to_word(int i, int pow) {
    if(i < 10) {
      return digit_to_word(i);
    }

    else {
      int k = i / 10;
      if(k > 10)
        return number_to_word(k, ++pow) + "^" + bases[pow] + " " + digit_to_word(i%10) ;
      else
        return digit_to_word(k) + "^" + bases[pow]  + " " + " " + digit_to_word(i%10);
    }
}



int main () {
   cin>>i;  
   cout << number_to_word(i, 1);
  return 0;
}

Upvotes: 1

john
john

Reputation: 87959

It's not a loop, it's recursion

Suppose you have 123,456,789, then with the code you have above you have

billions=0 millions=123 thousands=456

Now you want to output "one hundred and twenty three million four hundred and fifty six thousand ...", so you need to convert 123 into "one hundred and twenty three" and you need to convert 456 into "four hundred and fifty six". How do you do that? Well it's exactly the same problem that you are already trying to solve, only with smaller numbers.

So you are right you do need to write a function, and when that function needs to convert the number of millions into words it will call itself (i.e. it will be recursive). Same when it is converting the number of thousands.

Upvotes: 0

Related Questions