如何在C ++中递归反转负整数?

时间:2016-04-01 20:05:49

标签: c++ recursion

我正在进行一些递归练习,我需要编写一个反转整数输入的程序

  

输入示例:cin>> 12345;输出应为54321

但如果该整数为负,则负号必须仅附加到第一个数字。

  

输入示例:cin>> -1234;输出-4321

我很难让我的程序适应负数。如果我运行

,我的设置方式
  

测试示例:12345我得到正确的输出54321

所以我的递归和基础都是成功的。但如果我运行负面,我会

  

测试示例:-12345我得到这个是因为我不明白-5-4-3-2 1

#include<iostream>
using namespace std;
void reverse(int);
int main()
{
    int num;
    cout << "Input a number : ";
    cin >> num;
    reverse(num);
    return 0;
}


void reverse(int in)
{
    bool negative = false;
    if (in < 0)
    {
        in = 0 - in;
        negative = true;
    }

    if (in / 10 == 0)
        cout <<  in % 10;
    else{
        if (negative == true)
            in = 0 - in;
        cout << in % 10;
        reverse(in / 10);
    }
}

4 个答案:

答案 0 :(得分:1)

reverse函数拆分为两部分:第一部分只打印-(如果输入为负数),然后调用第二部分,即你拥有的递归代码。 (你不再需要任何if (negative) ...处理,因为第一部分已经处理了它。)

顺便说一句,if (bool_variable == true) ...过于冗长。如果您说if (value_is_negative) ...

之类的内容,则更容易阅读代码

答案 1 :(得分:1)

您的递归函数不保持状态。当您第一次递归时,它会打印“ - ”符号,但每次向递归发送一个负数时,它就会像第一次一样运行并再次打印“ - ”。

最好在第一次看到负数时打印' - ',然后将其余数字作为正值发送给递归。

#include<iostream>
using namespace std;
void reverse(int);
int main()
{
    int num;
    cout << "Input a number : ";
    cin >> num;
    reverse(num);
    return 0;
}


void reverse(int in)
{
    bool negative = false;
    if (in < 0)
    {
        in = 0 - in;
        negative = true;
    }

    if (in / 10 == 0)
        cout <<  in % 10;
    else{
        if (negative == true) {
            cout << '-';
            negative = false;
        }
        cout << in % 10;
        reverse(in / 10);
    }
}

答案 2 :(得分:1)

要反转负数,请输出-,然后反转相应的正数。我建议使用递归而不是状态,如下所示:

void reverse(int in)
{
    if (in < 0)
    {
        cout << '-';
        reverse(-in);
    }
    else
    {
       // code to recursively reverse non-negative numbers here
    }
}

答案 3 :(得分:0)

int reverse(long int x) {
     
long int reversedNumber = 0, remainder;
           bool isNegative = false;
    
    
    if (x <0){
        isNegative = true;
         x *= -1;
    }



while(x > 0) {
    remainder = x%10;
    reversedNumber = reversedNumber*10 + remainder;
    x= x/10;
    
}
    
    if  (isNegative) {
        
        if (reversedNumber > INT_MAX){
            return 0;
        }
        else
            return reversedNumber*(-1);
        
    }
         
    
    else 
    {
        if (reversedNumber > INT_MAX){
        
         return 0;
    }
        else 
            return reversedNumber;
        
    }
         

   
    
}