我用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;
}
程序的最终结果:打印相同的数字,功能无效。我究竟做错了什么?我尝试了几种解决方案但无济于事。
答案 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";
}