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

While probably not in the intended spirit, the simple answer is that if you're only going to display it in reverse, you can cheat and just work with a string:

std::string input;

std::cin >> input;

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

返される値を実際には使用していませんrev。rev に渡す値nrを使用しているだけであり、参照渡しをしていないため、 rev はローカルで影響を受けません。

あなたが言いたいことは次のとおりです。

int nr;
cout << "Give a number: ";
cin >> nr;
int result = rev(nr);
cout << result; 
return 0;
于 2012-04-12T15:46:58.840 に答える
1

std::reverseSTL には、コレクションを操作する関数があります。

#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 に答える