0

//DON'T JUDGE IT WAS MY FIRST YEAR OF LEARNING CS

#include <iostream>
using namespace std;
int main()
{
    int number, last_number, count = 0;
    cout << "Please enter a six digit number:" << endl;
    cin >> number;

    while (count < 6)
    {

         last_number = number % 10;


        if (last_number == 0)
            cout << "Zero ";
        else if (last_number == 1)
            cout << "One ";
        else if (last_number == 2)
            cout << "Two ";
        else if (last_number == 3)
            cout << "Three ";
        else if (last_number == 4)
            cout << "Four ";
        else if (last_number == 5)
            cout << "Five ";
        else if (last_number == 6)
            cout << "six ";
        else if (last_number == 7)
            cout << "Seven ";
        else if (last_number == 8)
            cout << "Eight ";
        else if (last_number == 9)
            cout << "Nine ";


        number = number / 10;
        count++;


    }
    cout << endl;
    return 0;

}

when i run the program it output opposite values e.g I want to print 123456 instead of out putting one two three four five six it outputs six five four three two one. How do i fix this?

Qadees PC
  • 13
  • 4
  • 1
    each time `last_number = number % 10;` gets the lower digit, not the upper one, so you write in reverse order. Out of that the `if .. else if ... else` can be simplified a lot using `const char * const a[] = {"Zero ", "One " .... "Nine"}` or a `std::vector`if you prefer and then `cout << a[last_number];` without if/else at all, but checking number is not negative at the beginning ... – bruno Apr 17 '21 at 10:41

4 Answers4

1

Since the number is broken down from right to left, the output shown is in reverse. There are several ways to fix this i.e you can use stack for pushing the output values and getting them in correct order. You can also create a string for example,

string number = "";

number = last_number + " " + number;

Noman Aziz
  • 31
  • 4
1
last_number=number%10

This line of code gives you the remainder of the number when divided by 10. So 123%10 shall give you last_number=3.

The answers using a string are correct. However, if you want to use an integer, here's another way using recursion:

#include<iostream>
using namespace std;
void print_digit(int last_number){
    if (last_number == 0)
            cout << "Zero ";
        else if (last_number == 1)
            cout << "One ";
        else if (last_number == 2)
            cout << "Two ";
        else if (last_number == 3)
            cout << "Three ";
        else if (last_number == 4)
            cout << "Four ";
        else if (last_number == 5)
            cout << "Five ";
        else if (last_number == 6)
            cout << "six ";
        else if (last_number == 7)
            cout << "Seven ";
        else if (last_number == 8)
            cout << "Eight ";
        else if (last_number == 9)
            cout << "Nine ";
}
void get_digits(int number){
    if(number<10){
        print_digit(number);
        return;
    }
    get_digits(number/10);
    print_digit(number%10);
}
int main(){
    int number=12345;
    get_digits(number);
}

If you don't want to use recursion, you can use the same logic you are using now and store the last_number values in a stack. You can find more ways here

learner
  • 45
  • 1
  • 7
0

well the problem in your logic is last_number = number % 10; because when you divide the number u get the last element for example if you divide 12345 with 10 you will get 5 as a remainder and that is where the problem arises try using string and a for loop it will be easier

#include <iostream>
using namespace std;
int main()
{
    string  number;
    cout << "Please enter a six digit number" << endl;
    cin >> number;

    for (int i = 0; i < number.length(); i++) 
    {
        if (number[i] == '0')
            cout << "Zero ";
        else if (number[i] == '1')
            cout << "One ";
        else if (number[i] == '2')
            cout << "Two ";
        else if (number[i] == '3')
            cout << "Three ";
        else if (number[i] == '4')
            cout << "Four ";
        else if (number[i] == '5')
            cout << "Five ";
        else if (number[i] == '6')
            cout << "six ";
        else if (number[i] == '7')
            cout << "Seven ";
        else if (number[i] == '8')
            cout << "Eight ";
        else if (number[i] == '9')
            cout << "Nine ";

    }
    return 0;
}
Naveen Singla
  • 76
  • 1
  • 8
0

You are getting the result in reverse order because you are extracting each digit from the end by means of modulus operation (%).

To get the answer in correct order, you can reverse the original number first and then use the same logic you are using.

....
cin >> number;
int tmp_number = 0;  //temporary number to store reverse value of "number"
while ( number > 0 )
{
   tmp_number = tmp_number * 10 + number % 10;
   number = number / 10;
}

number = tmp_number;
while (count < 6)
....