2

正の整数の数字を逆順に書き込む再帰関数を作成する割り当てがあります。私の問題は、関数が逆を正しく表示しないことです。数値を表示するときは % または 10 を使用し、再帰呼び出しの場合は 10 の / を使用し、基本ケースが < 10 であると想定されていることを知っています。これが私のコードです。

#include <iostream>
using namespace std;

int reverse(int,int);

int main()
{
    int number;
    int n;

    cout << " Enter number to reverse." << endl;
    cin >> number;
    cout << reverse(number % 10,0);

    return 0;
}//end main

int reverse(int number,int n)
{

    if(n < 10)
    {
        return n;
    }
    else
    {
        return reverse(number/10,n);
    }
}// end reverse
4

7 に答える 7

3

これはあなたの機能がどうあるべきかだと思います:

void reverse(int number){
    if(number == 0) //base/basic case i.e if number is zero the problem is already solved, nothing to do, so simply return
        return;
    else{
        cout << number % 10; // print that last digit, e.g 103%10 == 3 
        reverse(number/10); //solve the same problem but with smaller number, i.e make the problem smaller by dividing it by 10,  initially we had 103, now 10 
    }
}
于 2012-09-04T20:43:47.160 に答える
1

次のコードを使用できます (先行ゼロのストライピングを気にしない場合、または文字列または ostringstream に文字を蓄積できる場合)

unsigned reverse(unsigned n, unsigned acc)
{
    if (n == 0)
    {
            return acc;
    }
    else
    {
            return reverse(n / 10, (acc * 10) + (n % 10));
    }
}

unsigned reverse(unsigned n)
{
    return reverse(n, 0);
}
于 2012-09-04T20:56:54.940 に答える
1

このソリューションは、文字どおり整数の内容を逆にするため、末尾のゼロを省略します。

int reverse(int number, int n = 0)
{
  if (number == 0)
  {
    return n;
  }
  else
  {
    int nextdigit = number%10;
    int nextprefix = n*10+nextdigit;
    return reverse(number/10 ,nextprefix);
  }
}
于 2012-09-04T21:03:33.913 に答える
0
int rev(int n) {
    if(n<10&&n>-10) return n;

    int length=0;
    for (int i=n; i; i/=10) length++;

    return n%10*(int)pow(10, length-1) + rev(n/10);

}

これが私の解決策です。パラメータを 1 つだけ取り、int を返します。また、cmath を含めることを忘れないでください。

int intLength(int i) {
    int l=0;
    for(;i;i/=10) l++;
    return l;
}

int rev(int n) {
    return n<10&&n>-10 ? n : n%10*(int)pow(10, intLength(n)-1) + rev(n/10);
}

または、この方法はもう少しエレガントです。

于 2015-12-08T11:11:12.917 に答える
0

次のこともできます。

int reverse(int number,int n) {
if(number > n) {
    cout << number << endl;
    reverse(number-1,n);
}

ただし、最初の数字の印刷を 2 回削除する必要があります。

于 2012-09-04T20:45:50.433 に答える