使用前导零反转数字

时间:2010-11-12 16:36:19

标签: c++

我们如何使用前导零数来反转数字?   例如:如果输入为004,           输出应为400。

我写了下面的程序,但只有在输入中没有前导零时才有效。

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;

有没有办法输入带前导零的数字?即使这样,上面的逻辑对这些数字也不起作用。

任何简单的解决方案?将输入作为字符串并处理它是可行的。但那看起来不太好。

* 编辑:如果已知数字长度,则可以使用前导零反转数字。 (不使用字符串) *

我会尽快发布代码。

编辑2:我试图将字符放回到cin流,然后读取并计算反向。它适用于2位数字。

但如果长度已知,则更容易找到反向。我需要做的就是,按所需的次数乘以10。 所以我想,我会采用字符串方法。 希望面试官很高兴:)

10 个答案:

答案 0 :(得分:6)

是的,你必须使用一个字符串。您不能在 int 中存储前导零。

答案 1 :(得分:6)

前导零不是由二进制数字表示的intdouble等。)因此,您可能必须使用std::string。读取字符串中的输入,然后调用std::reverse()将字符串作为输入。

答案 2 :(得分:2)

如果你知道你想要的数字的总宽度,你可以重用你拥有的代码并将结果(从右到左)存储在零初始化数组中。注意:您可能希望在下面列出的代码中添加一些错误检查。

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;

这样您将来也可以更轻松地操纵数字。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

将输入转换为第3行中的整数后,任何有关用户输入中前导零的信息都将丢失。

你必须使用一个字符串。

答案 5 :(得分:1)

递归方法,但很容易转换为循环...

#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';
}

答案 6 :(得分:0)

正如ChrisF所说,你需要加载一个字符串,因为4和004是相同的int,你将它分配给int变量后就无法区分它。

接下来要做的是修剪字符串以包含数字(如果你想要正确)并在其上运行std::reverse - 你就完成了。

答案 7 :(得分:0)

将数字保留为字符串,然后使用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;

答案 8 :(得分:0)

while循环替换为for循环,并使用相同的运行次数,原始数字包含数字(包括前导零)。例如004将要求循环运行3次,而不是在x == 0之后过早终止。

答案 9 :(得分:0)

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

在最好的一个Python中反转。