3

我用 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;
}

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

4

5 回答 5

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;
}
于 2012-04-12T15:46:33.050 回答
4

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

要解决这个问题,只需分配或打印返回值:

cout << rev(nr);

或者

nr = rev(nr);
cout << nr;
于 2012-04-12T15:47:47.997 回答
2

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

std::string input;

std::cin >> input;

std::cout << std::string(input.rbegin(), input.rend());
于 2012-04-12T16:00:23.013 回答
1

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

你想说的是:

int nr;
cout << "Give a number: ";
cin >> nr;
int result = rev(nr);
cout << result; 
return 0;
于 2012-04-12T15:46:58.840 回答
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";
}
于 2012-04-12T16:07:48.563 回答