简体   繁体   中英

Reverse of a number with leading zeroes

How do we reverse a number with leading zeroes in number ? For ex: If input is 004, output should be 400.

I wrote below program but it works only when no leading zeroes in input.

int num;
cout<<"Enter number "<<endl;
cin>>num;

int rev = 0;
int reminder;
while(num != 0)
{
    reminder = num % 10;
    rev = rev * 10 + reminder;
    num = num / 10;
}
cout<<"Reverse = "<<rev<<endl;

Is there any way to input a number with leading zeroes ? Even then, Above logic doesn't work for such numbers.

Any simple solution ? It is doable by taking input as string and processing it. But that doesn't look nice.

* EDIT: If length of number is known, it looks to be possible to reverse a number with leading zeroes. (Without using string) *

I shall post the code as soon as it works.

EDIT 2: I tried to put back characters to cin stream and then read and calculate the reverse. It is working for 2 digit numbers.

But if length is known, its far easier to find reverse. All i need to do is, multiply by 10 for required number of times. So i think, i would go with string approach. Hoping that interviewer would be happy :)

Yes, you must use a string. You cannot store leading zeros in an int .

Leading zeroes are not represented by binary numbers ( int , double , etc.) So you'll probably have to use std::string . Read the input into the string, then call std::reverse() passing the string as input.

If you know the total width you'd like the number to be before-hand, you can reuse the code you have and store the results (from right to left) in a zero initialized array. Note: you'd probably want to add some error checking to the code listed below.

int num, width;

cout<<"Enter number "<<endl;
cin>>num;

cout<<"Enter width: "<<endl;
cin>>width;

int rev[width];
for (int i = 0; i < width; ++i)
    rev[i] = 0;

int cnt = width - 1;
int rev = 0;
int reminder;
while(num != 0)
{
    reminder = num % 10;
//    rev = rev * 10 + reminder;
    rev[cnt] = remainder;
    --cnt;
    num = num / 10;
}

cout << "Reverse: ";
for (int i = 0; i < width; ++i)
    cout << rev[i];
cout << endl;

This will allow you to manipulate the number more easily in the future as well.

以字符串格式读取数字(即使用std :: string)并反转字符串。

Once you convert your input to an integer, which you do in line 3, any information about the leading zeroes in the input of the user is lost.

You'll have to use a string.

A recursive approach, but easily converted to a loop...

#include <iostream>

int f(int value = 1)
{
    char c;
    return (std::cin.get(c) && isdigit(c))
           ? (c - '0') * value + f(10 * value)
           : 0;
}


int main()
{
    std::cout << f() << '\n';
}
s = int(raw_input(" enter the no of tyms :"))
n = 0
list, list1 = [], []

while n <= s:
    m = raw_input("enter the number:")
        n=n+1
        list.append(m)

print list
list.reverse()
print list

Reverse in one of the best lang Python.

As ChrisF said, you need to load a string, because 4 and 004 is the same int and you cannot distinguish it after you assign it to an int variable.

The next thing to do is trim the string to contain just digits (if you want to be correct) and run std::reverse on it - and you're done.

Keep the number as a string, and use std::reverse .

std::string num;
std::cout << "Enter number " << std::endl;
std::cin >> num;

std::string rev(num);
std::reverse(rev.begin(), rev.end());

std::cout << "Reverse = " << rev << std::endl;

Replace your while loop with a for loop with the same number of runs as you wish the original number has digits (including leading zeros). eg 004 would require the loop to be run 3 times, and not to terminate prematurely once x == 0 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM