Creanak
Creanak

Reputation: 1

How to reverse my input including the negative

This is my code that I have currently but it always outputs 0 I'm trying to get it to output the reverse of the input including the negative for example -123425 will be 524321-:

#include<iostream>
using namespace std;

int main() {
    int number;
    bool negative;
    cout << "Enter an integer: ";
    cin >> number;
    while (number != 0) {
        number % 10;
        number /= 10;
    }
    if (number < 0) {
        negative = true;
        number = -number;
        cout << number << "-";
    }
    else {
        negative = false;
    }
    cout << number << endl;

    return EXIT_SUCCESS;
}

Upvotes: 0

Views: 616

Answers (6)

Sky
Sky

Reputation: 1

using namespace std;

int main()

{

int number,flag=1;
long long int revnum=0;
bool negative;
cout << "Enter an integer: ";
cin >> number;
if(number<0)
{   negative=true;

}
while (number > 0) {
    revnum=revnum*10+number %10;   
    number /= 10;
}
if (negative)
{     revnum=(-revnum);
     cout << revnum << '-'<<endl;
 }
 else
 { cout<<revnum<<endl;
  }


return 0;

}

A few changes I did -

  1. checking the number whether it's negative or positive

  2. if negative converting it to positive

3.reversing the number with the help of a new variable revnum

4.and the printing it according to the requirement

To reverse the num-

revnum=revnum*10 + number%10

then num=num/10

like let's try to visualize

1.take a number for example like 342

2.for 1st step revnum=0 so revnum*10=0 and num%10=2 , so revnum will be 2

  1. and the number now is num/10 so 34

4.next now rev = 2 the rev*10=20 and num%10=4 then rev*10 + num/10 =24

5.finally we get 243

Hope it helps :)

edit:- just a small edit to solve the problem of the overflow of int , made revnum as long long int.

Upvotes: -1

MT756
MT756

Reputation: 629

If you don't want to use String or have to use int, here is the solution.

You want to check the negativity before you make changes to the number, otherwise the number would be 0 when it exit the while loop. Also, the modulus would be negative if your number is negative.

number % 10 only takes the modulus of the number, so you want to cout this instead of just leaving it there.

The last line you have cout << number << endl; will cout 0 since number has to be 0 to exit the while loop.

    if(number < 0) {
      number = -number;
      negative = true;
    }
    while (number != 0) {
        cout << number % 10;
        number /= 10;
    }
    if (negative) {
        cout << "-"<< endl;
    }

EDIT: With a broader assumption of the input taking all int type values instead of the reversed integer being a valid int type. Here is a modified solution.

    if(number < 0) {
      negative = true;
    }
    while (number != 0) {
        cout << abs(number % 10);
        number /= 10;
    }
    if (negative) {
        cout << "-"<< endl;
    }

Upvotes: 0

Doeus
Doeus

Reputation: 420

You could convert the input to a std::string, then reverse its content with std::reverse.

#include <algorithm> // reverse
#include <cstdlib>   // EXIT_SUCCESS
#include <iostream>  // cin, cout, endl
#include <string>    // string, to_string

using namespace std;

int main()
{
    cout << "Enter an integer: ";
    int number;
    cin >> number;
    auto str = to_string(number);

    reverse(str.begin(), str.end());
    cout << str << endl;

    return EXIT_SUCCESS;
}

Reading to an int first - and not to a std::string - makes sure that we parse a valid integer from the input. Converting it to a std::string allow us to reverse it. This let us feed inputs like -042 and -0 to the program, and get 24- and 0 as a result, not 240- and 0-.

Upvotes: 2

Daniel
Daniel

Reputation: 7714

Quite simple:

int reverse(int n){
    int k = abs(n);     //removes the negative signal
    while(k > 0){
        cout<<k % 10;   //prints the last character of the number
        k /= 10;        //cuts off the last character of the number
    }
    if(n < 0) cout<<"-";    //prints the - in the end if the number is initially negative
    cout<<endl;
}

int main(){
    int n = -1030;     //number you want to reverse
    reverse(n);
}

Upvotes: 0

Vlad from Moscow
Vlad from Moscow

Reputation: 311028

After the first loop

while (number != 0) {
    number % 10;
    number /= 10;
}

the variable number is equal to 0.

So the following if statement

if (number < 0) {
    negative = true;
    number = -number;
    cout << number << "-";
}
else {
    negative = false;
}

does not make sense.

Pay attention to that it can happen such a way that a reversed number can not fit in an object of the type int. So for the result number you should select a larger integer type.

Here is a demonstrative program that shows how the assignment can be done.

#include <iostream>

int main() 
{
    std::cout << "Enter an integer: ";

    int n = 0;

    std::cin >> n;

    bool negative = n < 0;
    const int Base = 10;

    long long int result = 0;

    do
    {
        int digit = n % Base;
        if ( digit < 0 ) digit = -digit;
        result = Base * result + digit;  
    } while ( n /= Base );

    std::cout << result;
    if ( negative ) std::cout << '-';
    std::cout << '\n';

    return 0;
}

Its output might look like

Enter an integer: 123456789
987654321-

Upvotes: 1

Shaavin
Shaavin

Reputation: 137

I think trying to visualize the process of your program is a great way to see if your solution is doing what you expect it to. To this end, let's assume that our number is going to be 12345. The code says that while this is not equal to 0, we will do number % 10 and then number /= 10. So if we have 12345, then:

number % 10 --> 12345 % 10 --> 5 is not assigned to any value, so no change is made. This will be true during each iteration of the while loop, except for different values of number along the way.

number /= 10 --> 12345 /= 10 --> 1234

number /= 10 --> 1234 /= 10 --> 123

number /= 10 --> 123 /= 10 --> 12

number /= 10 --> 12 /= 10 --> 1

number /= 10 --> 1 /= 10 --> 0 (because of integer division)

Now that number == 0 is true, we proceed to the if/else block, and since number < 0 is false we will always proceed to the else block and then finish with the cout statement. Note that the while loop will require number == 0 be true to exit, so this program will always output 0.

To work around this, you will likely either need to create a separate number where you can store the final digits as you loop through, giving them the correct weight by multiplying them by powers of 10 (similar to what you are hoping to do), or cast your number to a string and print each index of the string in reverse using a loop.

Upvotes: 0

Related Questions