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

问题描述:

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

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

+1

你不是用函数的返回值来翻译nr。 – kunigami 2012-04-12 15:46:03

+2

对于这样一个简单的问题,很多错误的答案...... – 2012-04-12 15:50:49

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

或交替改变你的函数:你不是实际使用值rev回报

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

这很好,但是你需要在这种情况下使rev返回void。 – Benj 2012-04-12 15:48:33

+0

@Benj已经修复。 – mydogisbox 2012-04-12 15:48:57

+0

这有效。谢谢! – Bugster 2012-04-12 15:50:45

。您只是使用您传递的值nr,因为您不通过引用传递,rev在本地不受影响。

你想说的是:

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

你这样做是对的,但你不抓住你的返回值(反转值)。

为了解决这个问题,只是分配或打印的返回值:

cout << rev(nr); 

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

这也是一个有效的答案,除了mydogisbox的答案这也适用。 – Bugster 2012-04-12 15:52:57

虽然可能不是预期精神,简单的回答是,如果你只打算以反向显示,您可以作弊,只需使用字符串:

std::string input; 

std::cin >> input; 

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

或者直接在字符串上使用'std :: reverse'。 (我从来没有在生产代码中找到这个函数的用法,但是因为它在那里:-)) – 2012-04-12 16:08:30

+0

@JamesKanze:是的,这也应该起作用。我不能说我曾经在真实的代码中使用它 - 可能至少是我没有想到它的一部分原因。 – 2012-04-12 16:11:57

+0

最初这段代码是为C语言编写的,它没有任何字符串,但是我用C++编写了它,感谢这个。 – Bugster 2012-04-12 16:12:37

有一个STL中的函数,它适用于集合。

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