PDA

View Full Version : [C] Radice digitale


Manugal
07-11-2005, 15:26
Ciao :)

Dovrei scrivere questo programma usando la ricorsione:

Scrivere un programma C che dato un numero n in input ne calcoli la radice digitale. La radice digitale di un numero è data dalla somma delle sue cifre finché non si riducono ad una sola cifra.

Esempio: 2365

prima somma = 16
seconda somma = 7

Ho provato a buttare giù qualcosa, però non mi viene per niente il passo ricorsivo.



int radicedigitale(int n){

int result=0;
int tmp=0;

if(n/10==0)
return n;
else
tmp+=(n%10)+radicedigitale(n/10);
result=tmp;
if(result/10!=0)
return radicedigitale(result);
}



Chi mi può aiutare? Grazie.

Manugal
07-11-2005, 15:35
Forse ci sono riuscito, però per un particolare numero che gli avevo dato non era venuto correttamente



int radicedigitale(int n){

int tmp=0;

if(n/10==0)
return n;
else
while(n>0){
tmp+=(n%10);
n/=10;
}
return radicedigitale(tmp);
}


Potete dirmi se è giusto? Grazie.

bottomap
07-11-2005, 15:55
Ciao,
Ho l'impressione che faresti prima ad utilizzare delle stringhe/array di caratteri...

Diciamo che una funzione che calcola la somma delle cifre (e rende un intero) potrebbe essere:

int ottieni_somma(char *str)
{
int result=0;
while(*str){result+=(*str)-'0';str++;}
return result;
}

chiamandola ripetutamente in un ciclo e convertendo in stringa il risultato:

sprintf(s,"%d",valore_intero)
while(strlen(s)>1)
{
int i=ottieni_somma(s);
sprintf(s,"%d",i);
}
//A questo punto in s hai un numero ad una cifra...
//se specificavi valori diversi per il confronto con strlen ottenevi numeri
//a più cifre...
//Per riconvertirlo (se serve) in intero puoi utilizzare atoi
//o qualsiasi altra funzione di conversione...

NB: Ovviamente la stringa s deve essere abbastanza grande per contenere le cifre del numero iniziale...

Ciaociao :)

Manugal
07-11-2005, 16:21
:) Veramente ancora non arriviamo a fare operazioni su stringhe e puntatori. Siamo arrivati ora ora alla ricorsione. Volevo sapere se la funzione che avevo creato calcola correttamente la radice digitale.

bottomap
08-11-2005, 01:46
Ciao,

Beh... se è così, il secondo codice apparentemente è giusto... qual'è il numero su cui ti pare abbia dato risultati errati?

Ciaociao :)

Manugal
08-11-2005, 15:32
Non mi ricordo più :muro: Avevo premuto dei tasti a caso e mi sembrava che non fosse venuto esattamente.