PDA

View Full Version : [C] Invertire variabile intera


Lucariello96
29-10-2013, 17:58
Ragazzi un altro piccolo problema..
Devo convertire una variabile di tipo intera in codice ASCII...
Prima cosa devo scomporre la variabile in numeri singoli e ci sono arrivato così:
while(numeri!=0){
printf("%d",numeri%10);
numeri=numeri/10;
}
Ora il problema è che riesco a separare i singoli numeri, solo che così me li scompone partendo dall'ultimo verso il primo...
Un informazione che potrebbe risolvermi il problema sarebbe scoprire da quanti numeri è composta la variabile, e girando in internet ho trovato solo sizeof, ma mi da sempre come risultato 4, e nn mi dice quanti numeri ci sono...
In mente avrei qualche soluzione, ma è brutta da scrivere..
Qualcuno mi sa dire il modo più veloce per farlo?

[Kendall]
29-10-2013, 18:46
Ragazzi un altro piccolo problema..
Devo convertire una variabile di tipo intera in codice ASCII...
Prima cosa devo scomporre la variabile in numeri singoli e ci sono arrivato così:

Ora il problema è che riesco a separare i singoli numeri, solo che così me li scompone partendo dall'ultimo verso il primo...
Un informazione che potrebbe risolvermi il problema sarebbe scoprire da quanti numeri è composta la variabile, e girando in internet ho trovato solo sizeof, ma mi da sempre come risultato 4, e nn mi dice quanti numeri ci sono...
In mente avrei qualche soluzione, ma è brutta da scrivere..
Qualcuno mi sa dire il modo più veloce per farlo?

sideof() restituisce la dimensione in memoria di una variabile (il numero di byte), quindi non è quello che cerchi.
Nel tuo caso comunque ti basta scomporre il numero nelle sue cifre come ti è stato spiegato, salvare tali cifre in un'array, quindi stampare le celle dell'array in senso inverso.

british
29-10-2013, 19:09
Per sapere da quante cifre è composto un numero.. come te la cavi con i logaritmi?

Lucariello96
29-10-2013, 19:32
Si anche io già avevo pensato a questo Kendal... pensavo che magari ci fosse qualcosa simile a sideof che mi faceva il conto, ma niente quindi... vabbè faccio con il vettore allora..

lasciamo stare i logaritmi XD

[Kendall]
29-10-2013, 20:18
Si anche io già avevo pensato a questo Kendal... pensavo che magari ci fosse qualcosa simile a sideof che mi faceva il conto, ma niente quindi... vabbè faccio con il vettore allora..

lasciamo stare i logaritmi XD

Il C è un linguaggio "a basso livello" (senza scomodare assembly, ovviamente).
Nel 90% dei casi non troverai nulla che ti semplifica la vita.
Comunque, essendo alle prime armi, ti consiglio di sbatterci sempre la testa sui problemi, e non cercare mai, se non strettamente necessario, funzioni che ti facilitino il compito.

FedNat
30-10-2013, 08:13
Ragazzi un altro piccolo problema..
Devo convertire una variabile di tipo intera in codice ASCII...
Prima cosa devo scomporre la variabile in numeri singoli e ci sono arrivato così:

Ora il problema è che riesco a separare i singoli numeri, solo che così me li scompone partendo dall'ultimo verso il primo...
Un informazione che potrebbe risolvermi il problema sarebbe scoprire da quanti numeri è composta la variabile, e girando in internet ho trovato solo sizeof, ma mi da sempre come risultato 4, e nn mi dice quanti numeri ci sono...
In mente avrei qualche soluzione, ma è brutta da scrivere..
Qualcuno mi sa dire il modo più veloce per farlo?

Per fare la conversione di formato intero -> ASCII puoi usare la sprintf() (http://www.cplusplus.com/reference/cstdio/sprintf/) o similari

Ad esempio:


int num;
char str[12];

sprintf(str, "%d", num);

fano
03-11-2013, 13:36
Temo che NON vogliano che si usi la sprinft(), vero?

Teoricamente dovrebbe esserci anche itoa(), ma non è standard:

http://www.cplusplus.com/reference/cstdlib/itoa

se sei su Linux, purtroppo, non la troverai!

DanieleC88
07-11-2013, 12:34
Con sprintf hai lo stesso problema di non sapere che dimensioni attribuire all'array. Consiglio anche io di ragionare sui logaritmi... ;)

van9
07-11-2013, 14:37
Ragazzi un altro piccolo problema..
Ora il problema è che riesco a separare i singoli numeri, solo che così me li scompone partendo dall'ultimo verso il primo...
Un informazione che potrebbe risolvermi il problema sarebbe scoprire da quanti numeri è composta la variabile,

Forza, la soluzione è aritmetica e non ti servono funzioni particolari, arrays o logaritmi per arrivarci. Quando ti blocchi, prova a prendere un esempio semplice:

n = 1234

1234: 10 = 123 x 10 + 4
123 : 10 =

van9
07-11-2013, 15:31
Ragazzi un altro piccolo problema..
Ora il problema è che riesco a separare i singoli numeri, solo che così me li scompone partendo dall'ultimo verso il primo...
Un informazione che potrebbe risolvermi il problema sarebbe scoprire da quanti numeri è composta la variabile,

Hai la soluzione sotto il naso e non la vedi, non ti servono funzioni speciali/arrays/logaritmi per arrivarci. Conta quante volte dividi il numero per dieci fino ad ottenere zero e saprai da quante cifre è composto (sistema di numerazione posizionale).


Un altro modo più astratto e interessante di vederla è:

f(n : 10) se n : 10 > 0
f(n) =
n % 10 altrimenti