PDA

View Full Version : [C] Sommare numero delle cifre


Manugal
19-10-2005, 21:51
Ciao a tutti!

Sono qui con un nuovo problema :D

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 :)

redcloud
19-10-2005, 21:53
Mi sa che devi usare gli operatori sui bit e le maschere...

Joker84
19-10-2005, 21:59
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......

NA01
19-10-2005, 22:40
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......
quoto.
nel caso ti servisse ti ricordo che il numero delle cifre è dato dal log in base 10

ciao

Joker84
19-10-2005, 23:06
nn penso che possa servire....cmq...

basta che fai un ciclo e quando il resto della divisione è <=0 esci....

Prova!

Manugal
20-10-2005, 07:24
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?

cionci
20-10-2005, 11:23
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):

while(m > 0)
{
printf("%d", x / m);
x %= m;
m /= 10;
}

Manugal
20-10-2005, 12:11
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.

cionci
20-10-2005, 12:12
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...

Manugal
20-10-2005, 12:25
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ì?

cionci
20-10-2005, 12:32
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

Manugal
20-10-2005, 12:43
Eh beh in effetti è più semplice come hai fatto tu :D Però l'idea insomma era quella..... Grazie proverò a tirare giù sto benedetto programma. Ciao ;)

VegetaSSJ5
20-10-2005, 18:06
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?

Manugal
20-10-2005, 18:15
Un'ultima cosa...... :) siccome devo fare la somma delle cifre quando la vado a fare mi ritira fuori il numero paro paro che gli ho dato in input. Io ho scritto questo codice:



while(m>0){
sum_cifre+=(num/m);
num%=m;
m/=10;
}



Non riesco a capire perché se gli passo ad esempio 234 mi restituisce 234 e non 9 (cioè la sua somma). :confused:

Manugal
20-10-2005, 18:23
Niente niente tutto a posto avevo sbagliato la condizione del for ;) Grazie ancora :)

cionci
20-10-2005, 18:26
perhcè facendo man itoa mi dice che non c'è niente? invece facendo man atoi mi appare il manuale di quella funzione?
itoa non è una funzione standard... Puoi utilizzare sprintf per fare la stessa cosa...

VegetaSSJ5
20-10-2005, 18:56
soluzione del problema usando la sprintf
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main () {
int num, sum=0, i;
char *buf;
buf= (char *) malloc (16*sizeof(char));
printf("Inserisci un numero: ");
scanf("%d", &num);
sprintf(buf, "%d", num);
for (i=0; i< strlen(buf); i++) sum+= buf[i]-48;
printf("\nLa somma delle cifre del numero e' %d\n", sum);
return 0;
}
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?

AnonimoVeneziano
20-10-2005, 21:18
La mia versione col for :



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;

}



Fa forse però un po' + schifo di quella col while() :D

Ciao

repne scasb
21-10-2005, 16:22
Ma a cosa ti serve sapere di quante cifre e' composto il numero?


#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);
}

cionci
21-10-2005, 16:58
Ma a cosa ti serve sapere di quante cifre e' composto il numero?
A niente...figurati che io credevo che volesse stampare le cifre...
Edit: sto facendo confusione fra i vari thread :D

AnonimoVeneziano
21-10-2005, 17:18
Ma a cosa ti serve sapere di quante cifre e' composto il numero?


#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);
}


A niente effettivamente :D

repne scasb
21-10-2005, 18:22
Anche per visualizzare le cifre di un numero al contrario non serve sapere di quante cifre e' composto il numero:


#include <stdio.h>

void main(void)

{
unsigned long numero,risul,i;

printf("Inserire numero: ");
scanf("%ld", &numero);

for(i=100000000L,risul=0;numero;numero/=10,i/=10)
risul+=(numero%10)*i;

printf("Risultato: %ld\n",risul/(i?i*10:1));
}