打印由用户给出的反向数字的算法?
我已经用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;
}
程序的最终结果:打印相同的号码,函数没有影响。我究竟做错了什么?我尝试了几个解决方案,但无济于事。
您需要更改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;
}
这很好,但是你需要在这种情况下使rev返回void。 – Benj 2012-04-12 15:48:33
@Benj已经修复。 – mydogisbox 2012-04-12 15:48:57
这有效。谢谢! – 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;
这也是一个有效的答案,除了mydogisbox的答案这也适用。 – Bugster 2012-04-12 15:52:57
虽然可能不是预期精神,简单的回答是,如果你只打算以反向显示,您可以作弊,只需使用字符串:
std::string input;
std::cin >> input;
std::cout << std::string(input.rbegin(), input.rend());
或者直接在字符串上使用'std :: reverse'。 (我从来没有在生产代码中找到这个函数的用法,但是因为它在那里:-)) – 2012-04-12 16:08:30
@JamesKanze:是的,这也应该起作用。我不能说我曾经在真实的代码中使用它 - 可能至少是我没有想到它的一部分原因。 – 2012-04-12 16:11:57
最初这段代码是为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";
}
你不是用函数的返回值来翻译nr。 – kunigami 2012-04-12 15:46:03
对于这样一个简单的问题,很多错误的答案...... – 2012-04-12 15:50:49