|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Radice digitale
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. Codice:
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); } Ultima modifica di Manugal : 07-11-2005 alle 14:28. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Forse ci sono riuscito, però per un particolare numero che gli avevo dato non era venuto correttamente
Codice:
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); } |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
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: Codice:
int ottieni_somma(char *str) { int result=0; while(*str){result+=(*str)-'0';str++;} return result; } Codice:
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... Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
![]() |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Ciao,
Beh... se è così, il secondo codice apparentemente è giusto... qual'è il numero su cui ti pare abbia dato risultati errati? Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Non mi ricordo più
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:14.