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

How to reverse a negative integer recursively in C++?

本文关键字:整数 递归 C++      更新时间:2023-10-16

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

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

但如果该整数为负数,则只需要将负号附加到第一个数字上。

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

我很难让我的程序适应负数。如果我运行,我设置它的方式

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

所以我的递归和基是成功的。但如果我检测出阴性,我会得到

测试示例:-1245我得到这个是因为我不理解-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);
    }
}

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

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

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

顺便说一句,if (bool_variable == true) ...过于冗长。如果说if (value_is_negative) ...之类的话,阅读代码会更容易。

您的递归函数不保持状态。当你第一次递归时,它会打印"-"符号,但每次你向递归返回负数时,它都会像第一次一样运行,并再次打印"-"。

最好在第一次看到负数时打印"-",并将数字的其余部分作为正值发送给递归。

#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);
    }
}
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;
        
    }
         
   
    
}