2016-04-01 9 views
0

ich auf einige Rekursion Praxis arbeite und ich brauche ein Programm zu schreiben, die die Eingabe einer ganzen ZahlWie wird eine negative Ganzzahl in C++ rekursiv umgekehrt?

Beispiel Eingabe umkehren: cin >> 12345; Die Ausgabe sollte 54321

sein, aber wenn die ganze Zahl negativ ist das negative Vorzeichen muss nur die erste Nummer angehängt werden.

Beispiel für Eingabe: cin >> -1234; Ausgabe -4321

Ich habe es schwer, mein Programm an die negativen Zahlen anzupassen. Die Art und Weise hat ich es einrichten, wenn ich

Beispiel Testlauf: 12345 Ich erhalte den rechten Ausgang 54321

Also meine Rekursion und Basis erfolgreich ist. Aber wenn ich eine negative laufen bekomme ich

Beispiel Test: -12.345 ich dies aus einem Grund verstehe ich nicht -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); 
    } 
} 
+1

if (in <0) return (-1 * reverse (-1 * in); –

+4

Warum nicht Sie drucken nur ein '-' und dann normal weiter mit '-in'? – 5gon12eder

+1

' cin >> 12345' was? –

Antwort

1

Um eine negative Zahl umzukehren, geben Sie eine - aus und kehren dann die entsprechende positive Zahl um. Ich würde vorschlagen, Rekursion anstatt Zustand verwendet wird, wie folgt aus:

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

Oder schreibe einfach "in = -in" und ganz in den normalen Code. –

+0

@MartinBonner Normalerweise würde ich das machen, aber er möchte es rekursiv machen. –

+0

Dies gilt perfekt in meinen Code rekursiv, aber sonst ** MUSS ** sein und sonst, wenn Sie sonst diese verrückten Duplikate erhalten, wo das Negativ auf jede Zahl angewendet wird – Callat

1

Split Die reverse Funktion in zwei Teile: der erste Teil druckt nur - (wenn die Eingabe negativ ist) und ruft dann den zweiten Teil, der den rekursiven Code ist, den Sie haben. (Sie brauchen keine der if (negative) ... Behandlung mehr, da der erste Teil bereits behandelt.)

Übrigens ist übermäßig ausführlich. Es ist einfacher, Code zu lesen, wenn Sie etwas wie if (value_is_negative) ... sagen.

1

Ihre rekursive Funktion hat keinen Status. Wenn Sie das erste Mal rekrutieren, wird das Symbol '-' ausgedruckt, aber jedes Mal, wenn Sie eine negative Zahl an die Rekursion zurücksenden, läuft es so, als ob es das erste Mal wäre und gibt '-' erneut aus.

Es ist besser, '-' zu drucken, wenn Sie zum ersten Mal eine negative Zahl sehen und den Rest der Zahl als positiven Wert an die Rekursion senden.

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