打印用户给出的反转数字的算法?

时间:2012-04-12 15:43:53

标签: c++ algorithm

我用C ++编写了一个小程序,提示用户输入,用户给出一个数字,然后计算机显示反转的数字。

例如:17变为71. 123变为321。

这是该计划:

#include <iostream>
#include <string>  //for later use.
using namespace std;

int rev(int x)
{
    int r = 0;
    while(x)
    {
        r = (r*10) + (x%10);
        x = x/10;
    }
    return r;
}

int main()
{
    int nr;
    cout << "Give a number: ";
    cin >> nr;
    rev(nr);
    cout << nr; 
    return 0;
}

程序的最终结果:打印相同的数字,功能无效。我究竟做错了什么?我尝试了几种解决方案但无济于事。

5 个答案:

答案 0 :(得分:7)

您需要将rev(nr);更改为nr = rev(nr);

或者将您的功能更改为:

void rev(int& x)
{
    int r = 0;
    while(x)
    {
        r = (r*10) + (x%10);
        x = x/10;
    }
    x = r;
}

答案 1 :(得分:4)

你做得对,但你没有抓住你的回报值(反转值)。

要解决此问题,只需指定或打印返回值:

cout << rev(nr);

nr = rev(nr);
cout << nr;

答案 2 :(得分:2)

虽然可能不符合预期的精神,但简单的答案是,如果您只是反向显示它,您可以作弊并使用字符串:

std::string input;

std::cin >> input;

std::cout << std::string(input.rbegin(), input.rend());

答案 3 :(得分:1)

您实际上并未使用rev返回的值。您只是使用传递给rev的值nr,并且由于您没有通过引用传递,因此本地不会影响rev。

你想说的是:

int nr;
cout << "Give a number: ";
cin >> nr;
int result = rev(nr);
cout << result; 
return 0;

答案 4 :(得分:1)

STL中有一个std::reverse函数,可以用于集合。

#include <algorithm>
#include <iostream>
#include <string>

int main() {

  long int i = 0;
  do {
    std::cout << "Gimme a number: " << std::endl;
  } while (not (std::cin >> i)); // make sure it *is* a number

  std::string display = std::to_string(i); // C++11

  std::reverse(display.begin(), display.end());

  std::cout << display << "\n";
}