|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Sommare numero delle cifre
Ciao a tutti!
Sono qui con un nuovo problema Devo scrivere un programma che sommi le cifre di un numero. Ad esempio se come numero ho 37415 il risultato deve essere 20. Non ho la più pallida idea di come scomporre il numero in singole cifre, o meglio non so come fare questa scomposizione per un numero di n cifre. Perché ad esempio in un esercizio precedente che avevo mi si chiedeva di verificare se un numero di al più 4 cifre era palindromo e io giocando sulle divisioni per 10 e sui moduli del numero sempre per 10, ci riuscivo a scomporlo. P.S. : Non devo usare né vettori, né puntatori, né liste. Grazie |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
|
Mi sa che devi usare gli operatori sui bit e le maschere...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2005
Città: Pompei(NA)
Messaggi: 3087
|
io ti consiglierei di fare un mod(%) e prendere la cifra ke ti interessa.....
es: 123=6 giusto?!? quindi: 123 %10=3+ 12%10=2+ 1%10= 1 ....=6 prova......
__________________
My Deviant-Gallery MacBook Pro 13'' Retina i5 dual-core a 2,6GHz - 8GB Ram - 256GB SSD :: iPhone 12 128GB :: iPad 7 128GB WiFi :: Apple Watch 4 (40mm) |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
Quote:
nel caso ti servisse ti ricordo che il numero delle cifre è dato dal log in base 10 ciao |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2005
Città: Pompei(NA)
Messaggi: 3087
|
nn penso che possa servire....cmq...
basta che fai un ciclo e quando il resto della divisione è <=0 esci.... Prova!
__________________
My Deviant-Gallery MacBook Pro 13'' Retina i5 dual-core a 2,6GHz - 8GB Ram - 256GB SSD :: iPhone 12 128GB :: iPad 7 128GB WiFi :: Apple Watch 4 (40mm) |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Grazie, attraverso i moduli so che si può fare, ma è fattibile con poche cifre. Se ho ad esempio un numero con 10 cifre come faccio a farlo attraverso i moduli?
|
|
|
|
|
|
#7 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Manugal: se non vuoi usare il logaritmo per trovarti il numero delle cifre, ti trovi il massimo multiplo di 10 minore di x (il numero da cercare)...
for(int m = 1; x / m >= 10; m *= 10); In questo momento in x hai il massimo multiplo di 10 minore di x... Dopo è banale (se vuoi continuare da solo non visualizzare lo spoiler):
Ultima modifica di cionci : 20-10-2005 alle 12:14. |
||
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ok ma trovare il numero delle cifre non mi serve a un granché perché dopo che ho trovato che un numero ha x cifre poi che ci faccio? A me servono proprio le cifre che compongono il numero è quello che non riesco a fare.
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Te l'ho scritto nel tag spoiler come si fa...ma una volta trovato il numero delle cifre è banale...dovresti arrivarci da solo senza guardare il mio codice...
Edit: avevo sbagliato la condizione di terminazione nel for PS: io non ho trovato le cifre, ma il massimo multiplo di 10 minore di x...di conseguenza se dividi x per m ottieni la prima cifra... Ultima modifica di cionci : 20-10-2005 alle 12:19. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Lo spoiler ancora non lo vedo perché vorrei farlo da solo
Mettiamo il caso che io abbia come numero n=38176, questo significa che il maggior multiplo di 10 minore di n è 10000. Io pensavo di fare una cosa del genere. Di fare un ciclo dove inizialmente dividevo il numero per 10000 così viene fuori 3,8176 e quindi aumento la somma con 3. Poi divido per 1000 e viene 38,176 a questo punto per prendere l'8 dopo il 3 facevo 38%10 e quindi mi viene fuori 8 e lo sommo al 3 di prima. All'iterazione successiva ho 38176/100 e viene 381,76, prendo 381%10 e viene fuori 1 e lo sommo e così via. Potrebbe andare così? |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
38176 / 10000 = 3 (è una divisione intera)
38176 % 10000 = 8176 10000 / 10 = 1000 8176 / 1000 = 8 8176 % 1000 = 176 1000 / 10 = 100 176 / 100 = 1 176 % 100 = 76 100 / 10 = 10 76 / 10 = 7 76 % 10 = 6 10 / 10 = 1 6 / 1 = 6 6 % 1 = 0 1 / 10 = 0 |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Eh beh in effetti è più semplice come hai fatto tu
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
ragazzi come si chiama quella funzione che converte un numero in stringa?
EDIT: trovata è la itoa. P.S. perhcè facendo man itoa mi dice che non c'è niente? invece facendo man atoi mi appare il manuale di quella funzione? Ultima modifica di VegetaSSJ5 : 20-10-2005 alle 18:09. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Un'ultima cosa......
Codice:
while(m>0){
sum_cifre+=(num/m);
num%=m;
m/=10;
}
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Niente niente tutto a posto avevo sbagliato la condizione del for
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#17 | ||
|
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
soluzione del problema usando la sprintf
P.S. se uso il tag code dentro lo spoiler è come se lo spoiler non ci fosse, si vede tutto! per cui ho tolto il tag code, ma in questo modo si è persa l'indentazione... è un bug del vbulletin? Ultima modifica di VegetaSSJ5 : 20-10-2005 alle 19:01. |
||
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
La mia versione col for :
Codice:
int main(void){
int numero, risul = 0, count=1;
scanf("%d", &numero);
while ( (numero / (10*(count))) != 0 )
count*=10;
for ( ; count != 0; count/=10 )
{
risul+=numero/count;
numero -= (numero/count)*count;
}
printf("%d\n", risul);
return 0;
}
Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Ma a cosa ti serve sapere di quante cifre e' composto il numero?
Codice:
#include <stdio.h>
void main(void)
{
int numero,risul;
printf("Inserire numero: ");
scanf("%d", &numero);
for (risul=0;numero;numero/=10)
risul+=numero%10;
printf("Somma: %d\n", risul);
}
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Edit: sto facendo confusione fra i vari thread Ultima modifica di cionci : 21-10-2005 alle 17:31. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:44.



















