PROBLEMA [C] Numero al contrario tramite ricorsione

Pubblicità

sLN

Nuovo Utente
Messaggi
59
Reazioni
5
Punteggio
26
Ciao ragazzi, ho un esercizio che mi chiede di creare una funzione che prenda in input un numero intero e restituisca il numero al contrario 729 ---> 927

il codice di quello che ho fatto fin'ora è
Codice:
int contrario(int n){
    if (n<10){
        return n;
    }
    return (n%10) *10 +contrario(n/10);
}
Fino a numeri a 2 cifre funziona.. il problema si crea per quelli maggiori di 2.
Prendiamo un numero a tre cifre.. per esempio 729:
729
farà
9*10+2*10+7= 117
e quello che voglio che faccia è
9*10+2 la restituisce e fa 92*10+7 --> 927

AIUTATEMI :cav:

Non una funzione void che la visualizzi soltanto al contrario grazie.. :D
 
Ultima modifica:
grazie ma così sono già capace di farlo
a me interessa una funzione ricorsiva che faccia la stessa cosa
 
grazie ma così sono già capace di farlo
a me interessa una funzione ricorsiva che faccia la stessa cosa
scusa non avevo capito che la cercavi ricorsiva..
ho trovato questa su internet (non la ho provata solo letta velocemente)

Codice:
[COLOR=#2B91AF]int[/COLOR] rev ([COLOR=#2B91AF]int[/COLOR] number){
    [COLOR=#2B91AF]int[/COLOR] base = [COLOR=#800000]1[/COLOR];

    [COLOR=#00008B]while[/COLOR] (number / (base * [COLOR=#800000]10[/COLOR])){[COLOR=#808080]/*
        * This calculates the base of the number
        * ie number = 435
        *    base   = 100
        */[/COLOR]
        base *= [COLOR=#800000]10[/COLOR];
    }

    [COLOR=#00008B]if[/COLOR] (number <= [COLOR=#800000]9[/COLOR]){
        [COLOR=#00008B]return[/COLOR] number;
    } [COLOR=#00008B]else[/COLOR] [COLOR=#00008B]if[/COLOR] (number >= [COLOR=#800000]10[/COLOR]){ [COLOR=#808080]// notice different expression[/COLOR]
        [COLOR=#2B91AF]int[/COLOR] revNum = (number % [COLOR=#800000]10[/COLOR]) * base; [COLOR=#808080]// this was out of order[/COLOR]
        [COLOR=#00008B]return[/COLOR] rev (number / [COLOR=#800000]10[/COLOR]) + revNum;
    }
}
 
Codice:
int contrario(int n){
	int ris;
	for (ris=1;n/ris>10;ris*=10);
	
	if (n<10){
		return n;
	}
	
	return (n%10)*ris+contrario(n/10);
}
Infine ieri sera l'avevo risolta cosi che è simile al metodo che hai trovato tu JJ_



Codice:
int rev(int num){
    return num < 10 ? num : (num % 10) * pow(10, (int)log10(num)) + rev(num/10);
}

Sei un boss:luxhello:


Grazie mille ragazzi
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top