/* Calcola ricorsivamente l'intero corrispondente all'inversione di n. * Introduciamo una variabile statica: moltiplicatore. * Cerchiamo di rispettare questa proprieta': * alla chiusura della chiamata ricorsiva inverti(n), * moltiplicatore contiene la potenza di 10 * corrispondente alle cifre di n. * Esempio: * dopo la chiamata inverti(145), moltiplicatore vale 100. * dopo la chiamata inverti(4), moltiplicatore vale 1. */ int inverti (int n) { static int moltiplicatore = 1; int ultima_cifra; // ultima cifra di n int prima_parte; // prime cifre di n tranne l'ultima int prima_parte_invertita; // valore di prima_parte invertita if (n < 10) // isoliamo il caso a una cifra return n; else { // passo ricorsivo: almeno due cifre ultima_cifra = n % 10; prima_parte = n / 10; prima_parte_invertita = inverti(prima_parte); // Dopo la chiamata di inverti(prima_parte) // moltiplicatore rappresenta la potenza di 10 // corrispondente alle cifre di prima_parte moltiplicatore *= 10; // Ora moltiplicatore rappresenta la potenza di 10 // corrispondente alle cifre di n. // Lo sfruttiamo per mettere ultima_cifra in testa al valore di ritorno return ultima_cifra * moltiplicatore + prima_parte_invertita; } }
int main() { char stringa[20]; int i; struct lista *inizio=NULL; printf("Inserisci la stringa: "); scanf("%s",stringa); for(i=0; i < strlen(stringa); i++) inizio = ins_coda(inizio,stringa[i]); printf("h->"); stampa(inizio); printf("NULL\n"); inizio = inverti(inizio); printf("h->"); stampa(inizio); puts("NULL"); return 0; }
int main(void) { int numero = leggi(); printf("%d\n", inverti(numero)); return 0; }