Inversione di un numero con ricorsione C++
Salve ragazzi, vorrei chiedervi un parere riguardo il seguente codice che è in grado di invertire un numero di 2 o 3 cifre ma non di 4... potreste suggerirmi un metodo per invertire qualsiasi numero? :
#include <iostream> using namespace std; int inversione(int x){ if(x/10 == 0) { return x; } else if(x/10>=10 && x/10<1003) { return (((x%100)%10)*100)+inversione(x/10); } return (x%10)*10+inversione(x/10);} int main() { int x, inverso; cout<<"inserire un numero x da invertire : "; cin>>x; inverso=inversione(x); cout<<"il numero invertito è il seguente : "<<inverso<<endl; return 0; }
Risposte
Il problema è che non sai per quale multiplo di 10 devi moltiplicare il tutto. Hai di fatto due possibilità: trovare questo valore oppure usare una ricorsione a due funzioni.
La ricorsione ha due funzioni funziona più o meno così:
La ricorsione ha due funzioni funziona più o meno così:
#include <iostream> unsigned inverti_internal( unsigned x, unsigned& mult ) { if ( x < 10 ) { mult = 10; return x; } unsigned y = inverti_internal( x / 10, mult ); x = y + mult * ( x % 10 ); mult *= 10; return x; } unsigned inverti( unsigned x ) { unsigned mult; return inverti_internal( x, mult ); } int main( void ) { std::cout << inverti( 12345 ) << std::endl; }