View Full Version : [C] spezzettare un numero nelle sue singole cifre
dnclover
17-10-2006, 18:32
Salve ragazzi,
sono nuovo del mondo della programmazione e chiedo a voi per favore l'algoritmo risolutivo per il seguente problema e cioè:
Prendere in input un numero di 5 cifre e spezzettarlo nelle sue singole cifre,visualizzarle una ad una separata da 3 spazi e riconoscere quante cifre uguali di un numero a piacere sono presenti nel numero immesso inizialmente.
Non vi chiedo di darmi l'algoritmo completo (oddio se possibile mi farebbe comodo in modo da poterlo studiare :-) ),ma la mia maggiore difficoltà è spezzettare il numero nelle sue singole cifre e visualizzarle una ad una.
Vi ringrazio anticipatamente,ciao a tutti :)
tomminno
17-10-2006, 18:37
Salve ragazzi,
sono nuovo del mondo della programmazione e chiedo a voi per favore l'algoritmo risolutivo per il seguente problema e cioè:
Prendere in input un numero di 5 cifre e spezzettarlo nelle sue singole cifre,visualizzarle una ad una separata da 3 spazi e riconoscere quante cifre uguali di un numero a piacere sono presenti nel numero immesso inizialmente.
Non vi chiedo di darmi l'algoritmo completo (oddio se possibile mi farebbe comodo in modo da poterlo studiare :-) ),ma la mia maggiore difficoltà è spezzettare il numero nelle sue singole cifre e visualizzarle una ad una.
Vi ringrazio anticipatamente,ciao a tutti :)
Ma per la conversione da intero a stringa ti devi scrivere la funzione oppure puoi affidarti a quello che il C mette a disposizione?
Perchè in tal caso è banale, basta sprintf o itoa e poi lavori sui singoli caratteri.
dnclover
17-10-2006, 18:40
Penso di poter utilizzare al massimo if,while e credo che si debbano utilizzare gli operatori % (mod) e / (diviso),nessuna funzione avanzata.
Grazie :)
ci provo... (è in c++, qualcuno modifichi i cout e i cin in c :))
#include <iostream>
using namespace std;
int main()
{
//questo codice spezzetta il numero in un array:
//la prima cifra del numero diventa array[0], la seconda array[1] e cosi' via
int numero;
int cifre[5]={0,0,0,0,0};//per evitare errori
cout << "Inserire il numero: ";
cin >> numero;
for(int i=4;i>=0;i--)
{
while(numero%10)//finchè il numero non è divisibile per 10
{
numero--;
cifre[i]++;
}
numero/=10;
}
cout << "Le cifre sono:\n";
for(int i=0;i<5;i++)
{
cout << cifre[i] << endl;
}
}
dovrebbe funzionare ;)
edit: questo è il ragionamento che ho fatto:
facciamo che numero = 12345;
decremento il numero di un'unità finchè non è divisibile per 10 (cioè finche l'unità non diventa 0) e per ogni unità che tolgo, ne aggiungo una nell'array cifre, al posto in cui si trovava nel numero, -1 (5 sarà in cifre[4]).
quando il numero diventa divisibile per 10 lo divido peer dieci cosi' che le ex decine diventino le unità, cosi' che si possa di nuovo fare il procedimento da capo.
facendo tutto questo procedimento 5 volte (quante sono le ficre del numero) si ottiene il numero spezzettato nell'array cifre: cifre[0]==1, cifre[1]==2, cifre[2]==3 e così via.
re-edit: uh, non mi ero accorto che questo è il mio 400 post :D
dnclover
17-10-2006, 19:31
ci provo... (è in c++, qualcuno modifichi i cout e i cin in c :))
#include <iostream>
using namespace std;
int main()
{
//questo codice spezzetta il numero in un array:
//la prima cifra del numero diventa array[0], la seconda array[1] e cosi' via
int numero;
int cifre[5]={0,0,0,0,0};//per evitare errori
cout << "Inserire il numero: ";
cin >> numero;
for(int i=4;i>=0;i--)
{
while(numero%10)//finchè il numero non è divisibile per 10
{
numero--;
cifre[i]++;
}
numero/=10;
}
cout << "Le cifre sono:\n";
for(int i=0;i<5;i++)
{
cout << cifre[i] << endl;
}
}
dovrebbe funzionare ;)
edit: questo è il ragionamento che ho fatto:
facciamo che numero = 12345;
decremento il numero di un'unità finchè non è divisibile per 10 (cioè finche l'unità non diventa 0) e per ogni unità che tolgo, ne aggiungo una nell'array cifre, al posto in cui si trovava nel numero, -1 (5 sarà in cifre[4]).
quando il numero diventa divisibile per 10 lo divido peer dieci cosi' che le ex decine diventino le unità, cosi' che si possa di nuovo fare il procedimento da capo.
facendo tutto questo procedimento 5 volte (quante sono le ficre del numero) si ottiene il numero spezzettato nell'array cifre: cifre[0]==1, cifre[1]==2, cifre[2]==3 e così via.
re-edit: uh, non mi ero accorto che questo è il mio 400 post :D
Ciao Angel,
ti ringrazio tantissimo per il codice ma purtroppo non mi è utile perchè a me serve in C ed in più dovrebbe essere un algoritmo molto più semplice visto che è un esercizio del secondo capitolo del libro di deitel & deitel (C how to program) in italiano.
Comunque grazie tante :)
a me serve in Cnon c'è problema... basta modificare l'header e i cin e i cout.dovrebbe essere un algoritmo molto più semplicepiu semplice di un for e di un while è difficile farlo..
ecco il codice in c:#include <stdio.h>
int main()
{
//questo codice spezzetta il numero in un array:
//la prima cifra del numero diventa array[0], la seconda array[1] e cosi' via
int numero;
int cifre[5]={0,0,0,0,0};//per evitare errori
printf("Inserire il numero\n");
scanf("%d",&numero);
for(int i=4;i>=0;i--)
{
while(numero%10)//finchè il numero non è divisibile per 10
{
numero--;
cifre[i]++;
}
numero/=10;
}
printf("Le cifre sono: %d, %d, %d, %d e %d\n",cifre[0],cifre[1],cifre[2],cifre[3],cifre[4]);
}
Gino+89+
17-10-2006, 22:26
Io ti do una mia soluzione molto legnosa ma che uso sempre pure in assembly:
/*
*Prendere in input un numero di 5 cifre e spezzettarlo nelle sue singole cifre,
*visualizzarle una ad una separate da 3 spazi e riconoscere quante cifre
*uguali di un numero a piacere sono presenti nel numero immesso inizialmente.
*/
#include <stdio.h>
int main()
{
int num,i;
int moltiplicatore=10000;
int vett[5];
int numInit;
int count=0;
printf("Inserisci num predefinito:");
scanf("%d",&numInit);
while(getchar()!='\n');
printf("\nInserisci il numero -5 cifre- :");
scanf("%d",&num);
while(getchar()!='\n');
for(i=0;i<5;i++)
{
vett[i]=num/moltiplicatore;
num=num%moltiplicatore;
if(num==numInit)
count++;
moltiplicatore/=10;
}
for(i=0;i<5;i++)
printf("%d ",vett[i]);
printf("\n\nCi sono %d numeri uguali al num predefinito",count);
getchar();
return 0;
}
L'unica cosa che non gira (ora vado a letto) è il fatto della variabile da confrontare ma per il resto tutto ok...al posto di moltiplicatore potevi scrivere divisore che era meglio ma capiscimi è tardi...
la mia versione per la parte che reputi difficile:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main() {
unsigned int Number = 0;
do {
if (scanf("%u", &Number) < 1) {
continue;
}
}
while (Number > 99999);
for (Weight = 4; Weight >= 0; Weight--) {
printf("%4d", (Number / (int)pow(10, Weight)) % 10);
}
printf("\n");
getchar();
return 0;
}
trallallero
18-10-2006, 09:23
Penso di poter utilizzare al massimo if,while e credo che si debbano utilizzare gli operatori % (mod) e / (diviso),nessuna funzione avanzata.
Grazie :)
sprintf funzione avanzata ? :eek:
ti consiglio di imparare ad usarla prima possibile perché se inizi a lavorare in C farai tante sprintf e pochissimi cicli con potenze di 10 e % ... nella maggior parte dei posti di lavoro, intendo, poi ci saranno le eccezioni ...
tomminno
18-10-2006, 09:52
sprintf funzione avanzata ? :eek:
ti consiglio di imparare ad usarla prima possibile perché se inizi a lavorare in C farai tante sprintf e pochissimi cicli con potenze di 10 e % ... nella maggior parte dei posti di lavoro, intendo, poi ci saranno le eccezioni ...
Non si capisce bene, ma l'esercizio potrebbe anche essere quello di convertire interi in caratteri senza usare le funzioni messe a disposizione dal C. Altrimenti è veramente banale.
Una soluzione che mi viene in mente per convertire a mano interi in char è una sequenza di divisioni per potenze del 10 e sommare 48.
Ma cosa convertite a fare? :eek:
Basta prendere in input i 5 CARATTERI che rappresentano le cifre
del numero, e stamparli poi come richiede l'esercizio!
Sempre se ho capito bene...
trallallero
18-10-2006, 10:04
Non si capisce bene, ma l'esercizio potrebbe anche essere quello di convertire interi in caratteri senza usare le funzioni messe a disposizione dal C. Altrimenti è veramente banale.
Una soluzione che mi viene in mente per convertire a mano interi in char è una sequenza di divisioni per potenze del 10 e sommare 48.
beh di modi, come sempre, ce ne sono vari, ma non capisco perché vietare l'uso di funzioni C standard strausatissime. Penso che la cosa piú importante, nella programmazione, sia imparare a trovare la soluzione ottimale ovvero piú veloce, piú leggibile, piú dinamica, mantenibile etc. E non trovare l'algoritmo matematico che usa potenze o moduli. Per quello c'é l'esame "matematica" ;)
cosa c'é di meglio di un:
sprintf( s, "%i", num );
while (s[i])
sprintf( ss + strlen(ss), "%c ", s[i++] )
trallallero
18-10-2006, 10:05
Ma cosa convertite a fare? :eek:
Basta prendere in input i 5 CARATTERI che rappresentano le cifre
del numero, e stamparli poi come richiede l'esercizio!
Sempre se ho capito bene...
:asd: ancora piú semplice
tomminno
18-10-2006, 10:36
beh di modi, come sempre, ce ne sono vari, ma non capisco perché vietare l'uso di funzioni C standard strausatissime. Penso che la cosa piú importante, nella programmazione, sia imparare a trovare la soluzione ottimale ovvero piú veloce, piú leggibile, piú dinamica, mantenibile etc. E non trovare l'algoritmo matematico che usa potenze o moduli. Per quello c'é l'esame "matematica" ;)
cosa c'é di meglio di un:
sprintf( s, "%i", num );
while (s[i])
sprintf( ss + strlen(ss), "%c ", s[i++] )
A me a Fondamenti 1 come esercizio (non certo dell'esame) lo hanno dato quello di convertire senza sprintf, itoa o atoi.
I corsi di matematica servono a ben altro che non trovare algoritmi.
trallallero
18-10-2006, 10:52
A me a Fondamenti 1 come esercizio (non certo dell'esame) lo hanno dato quello di convertire senza sprintf, itoa o atoi.
I corsi di matematica servono a ben altro che non trovare algoritmi.
si é vero, sicuramente a matematica non fai neanche i cicli, ma era per dire dai :stordita:
parlavo di potenze e resti di divisioni, roba matematica :O
sprintf funzione avanzata ? :eek: non può usare sprintf perché l'esercizio chiede che le 5 cifre siano stampate distanziate di 3 caratteri...
trallallero
18-10-2006, 11:58
non può usare sprintf perché l'esercizio chiede che le 5 cifre siano stampate distanziate di 3 caratteri...
non capisco :what:
la sprintf la usi solo per "stringare" l'integer su un char d'appoggio.
Poi prendi char per char e lo "ristringhi" diviso da 3 chars ...
(povera lingua italiana :D )
Marco Giunio Silano
18-10-2006, 13:46
non capisco :what:
la sprintf la usi solo per "stringare" l'integer su un char d'appoggio.
Poi prendi char per char e lo "ristringhi" diviso da 3 chars ...
(povera lingua italiana :D )
amen :D
trallallero
18-10-2006, 13:50
amen :D
amen é ebraico :O
Marco Giunio Silano
18-10-2006, 13:57
amen é ebraico :O
:Prrr:
repne scasb
18-10-2006, 18:14
Prendere in input un numero di 5 cifre e spezzettarlo nelle sue singole cifre,visualizzarle una ad una separata da 3 spazi e riconoscere quante cifre uguali di un numero a piacere sono presenti nel numero immesso inizialmente.
#include <stdio.h>
void main(void)
{
char n[6];
scanf("%5s",n);
printf("%c %c %c %c %c",n[0],n[1],n[2],n[3],n[4]);
n[0]=(n[0]==n[1])+(n[0]==n[2])+(n[0]==n[3])+(n[0]==n[4]);
n[1]=(n[1]==n[2])+(n[1]==n[3])+(n[1]==n[4]);
n[2]=(n[2]==n[3])+(n[2]==n[4]);
n[3]=(n[3]==n[4]);
n[3]=n[3]<n[2]?n[2]:n[3];
n[3]=n[3]<n[1]?n[1]:n[3];
n[3]=n[3]<n[0]?n[0]:n[3];
printf("\nCi sono %d cifre uguali",++n[3]);
}
CUTcredo bisogni prenderlo in input come int e poi convertirlo
repne scasb
18-10-2006, 18:41
credo bisogni prenderlo in input come int
Dov'e' scritto?
Dov'e' scritto?
mi sembra normale... altrimenti basterebbe prenderlo in input, inserendolo direttamente in una stringa e outputtare la stringa carattere per carattere..
repne scasb
18-10-2006, 21:53
mi sembra normale...
Rispetto a cosa?
Rispetto a cosa?
uff... oggi non ce la faccio piu' a litigare.
repne scasb
18-10-2006, 22:11
uff... oggi non ce la faccio piu' a litigare.
Forza, fra meno di 110 minuti inizia un nuovo giorno.
Cosi' ti aggrada di piu':
#include <stdio.h>
void main(void)
{
long nn,n[6];
scanf("%5ld",&nn);
printf("%ld %ld %ld %ld %ld",n[0]=nn/10000,n[1]=(nn/1000)%10,n[2]=(nn/100)%10,n[3]=(nn/10)%10,n[4]=nn%10);
n[0]=(n[0]==n[1])+(n[0]==n[2])+(n[0]==n[3])+(n[0]==n[4]);
n[1]=(n[1]==n[2])+(n[1]==n[3])+(n[1]==n[4]);
n[2]=(n[2]==n[3])+(n[2]==n[4]);
n[3]=(n[3]==n[4]);
n[3]=n[3]<n[2]?n[2]:n[3];
n[3]=n[3]<n[1]?n[1]:n[3];
n[3]=n[3]<n[0]?n[0]:n[3];
printf("\nCi sono %d cifre uguali",++n[3]);
}
repne scasb
18-10-2006, 22:45
Su una riga sola:
#include <stdio.h>
void main(void)
{
long nn,n[6];
scanf("%5ld",&nn);
printf("%ld %ld %ld %ld %ld",n[0]=nn/10000,n[1]=(nn/1000)%10,n[2]=(nn/100)%10,n[3]=(nn/10)%10,n[4]=nn%10);
n[0]=(n[0]==n[1])+(n[0]==n[2])+(n[0]==n[3])+(n[0]==n[4]);
n[1]=(n[1]==n[2])+(n[1]==n[3])+(n[1]==n[4]);
n[2]=(n[2]==n[3])+(n[2]==n[4]);
n[3]=(n[3]==n[4]);
printf("\nCi sono %d cifre uguali",(((((n[3]>n[2])*(n[3]-n[2])+n[2])>n[1])*((n[3]>n[2])*(n[3]-n[2])+n[2]-n[1])+n[1])>n[0])*((((n[3]>n[2])*(n[3]-n[2])+n[2])>n[1])*((n[3]>n[2])*(n[3]-n[2])+n[2]-n[1])+n[1]-n[0])+n[0]+1);
}
non capisco :what:
la sprintf la usi solo per "stringare" l'integer su un char d'appoggio.
Poi prendi char per char e lo "ristringhi" diviso da 3 chars ... aaaaaaah ho capito... :mbe:
carina come idea; a sto punto meglio usare direttamente itoa però: crei il tuo intero nella stringa e poi ti rimanipoli la stringa separando i caratteri da 3 spazi ciascuno.
trallallero
19-10-2006, 08:52
aaaaaaah ho capito... :mbe:
carina come idea; a sto punto meglio usare direttamente itoa però: crei il tuo intero nella stringa e poi ti rimanipoli la stringa separando i caratteri da 3 spazi ciascuno.
uhm ... :idea: ... questa batte tutti:
strcpy( s, "1 2 3 4 5" );
:yeah:
PS: itoa non é ANSI ma solo per fighette che usano Windows :ciapet:
dnclover
19-10-2006, 13:19
Ragazzi volevo ringraziare tutti per il vostro contributo anche se avete avuto tante diatribe ma almeno potete confrontarvi :) .
Adesso vado a studiarmi un pò gli algoritmi che mi avete proposto per capire come ci si arriva a far conoscere queste benedette 5 cifre.
Grazie ancora,ciao :)
trallallero
19-10-2006, 13:23
Ragazzi volevo ringraziare tutti per il vostro contributo anche se avete avuto tante diatribe ma almeno potete confrontarvi :) .
Adesso vado a studiarmi un pò gli algoritmi che mi avete proposto per capire come ci si arriva a far conoscere queste benedette 5 cifre.
Grazie ancora,ciao :)
diatribe queste ? :rotfl:
vai su politica e apri un 3d: "Meglio Prodi o Berlusconi ?" e vedi cosa é una ditriba :asd:
buono studio ;)
Marco Giunio Silano
19-10-2006, 13:28
diatribe queste ? :rotfl:
vai su politica e apri un 3d: "Meglio Prodi o Berlusconi ?" e vedi cosa é una ditriba :asd:
buono studio ;)
oppure entra in ufficio e prova a dire: "La macchinetta del caffè è rotta" :D
trallallero
19-10-2006, 13:40
oppure entra in ufficio e prova a dire: "La macchinetta del caffè è rotta" :D
suicidi di massa :eek:
#include <stdio.h>
#define true 1
#define false 0
int numero,i,cifra,flag;
int main() {
printf("Inserisci il numero:");
scanf("%d",&numero);
flag = 0;
for ( i = 10000; true; numero %= i,i /= 10 ) {
if ( ( cifra = (numero/i) ) == 0 && !flag )
continue;
else {
flag = true;
printf("%d ", cifra);
if ( i == 1 ) break;
}
}
return 0;
}
Non capirò mai perché la gente si deve complicare la vita.
Mah... :rolleyes:
Nota: Il mio algoritmo è generale per qualsiasi base ( in questo caso si tratta di base 10).
Vediamo chi di voi riesce a modificarlo per fare stampare in binario il numero inserito.
La soluzione è valida con sole 2 modifiche. :cool: :D
Marco Giunio Silano
19-10-2006, 13:59
Nota: Il mio algoritmo è generale per qualsiasi base ( in questo caso si tratta di base 10).
Vediamo chi di voi riesce a modificarlo per fare stampare in binario il numero inserito.
La soluzione è valida con sole 2 modifiche. :cool: :D
ma non possiamo stamparlo in hex che è più semplice? :p :D
è lo stesso libro che ho io, praticamente si deve risolvere solo con i cicli for, if e while, senza usare nient'altro anche perche è nel secondo capitolo e fino a quel punto il libro spiega soltanto queste cose, l'avevo svolto ma ora nn ricordo dove ce l'ho salvato
ma non possiamo stamparlo in hex che è più semplice?
Con il mio algoritmo si può fare pure. Sempre con le 2 modifiche
Solo che invece di stampare dopo il 9 le lettere A, B,C..ecc...stampa i valori numeri ovvero..10,11,12,ecc... :D :D :sofico:
dnclover
19-10-2006, 15:54
Ragazzi se non vi chiedo troppo,potreste spiegarmi attraverso lo pseudocodice qual è l'algoritmo che si deve usare per poter riconoscere le 5 cifre?Vorrei capirlo bene in modo da riuscire a riprodurre da me un algoritmo valido.
Vi ringrazio ancora e scusatemi se vi disturbo :)
tomminno
19-10-2006, 16:03
Ragazzi se non vi chiedo troppo,potreste spiegarmi attraverso lo pseudocodice qual è l'algoritmo che si deve usare per poter riconoscere le 5 cifre?Vorrei capirlo bene in modo da riuscire a riprodurre da me un algoritmo valido.
Vi ringrazio ancora e scusatemi se vi disturbo :)
Se usi la funzione del C sprinf non c'è nessun algoritmo da implementare.
Altrimenti se sai che il numero è massimo di 5 cifre (ma si può fare benissimo parametrico) puoi cominciare dividendo per 10^4; al numero ottenuto sommi 48 e casti a char, così avrai il carattere corrispondente al numero (in ASCII '0'=48). Poi dividi per 10^3 e ne fai il modulo con 10 e converti in char come sopra, poi per 10^2 e ne fai il modulo con 10 ecc...
dnclover
19-10-2006, 16:17
Se usi la funzione del C sprinf non c'è nessun algoritmo da implementare.
Altrimenti se sai che il numero è massimo di 5 cifre (ma si può fare benissimo parametrico) puoi cominciare dividendo per 10^4; al numero ottenuto sommi 48 e casti a char, così avrai il carattere corrispondente al numero (in ASCII '0'=48). Poi dividi per 10^3 e ne fai il modulo con 10 e converti in char come sopra, poi per 10^2 e ne fai il modulo con 10 ecc...
Tommino ti ringrazio per avermi risposto,ma forse non mi sono spiegato bene prima.Cioè io vorrei capire come,matematicamente,posso dividere un numero di 5 cifre effettuando dei semplici calcoli.Grazie :)
Vorrei capirlo bene in modo da riuscire a riprodurre da me un algoritmo valido.
Vi ringrazio ancora e scusatemi se vi disturbo
La teoria non è molto difficile.
Tutto dipende dal sistema di numerazione posizionale. (http://it.wikipedia.org/wiki/Numerazione_posizionale)
Ora, il mio algoritmo non fa altro che scovare le cifre del numero partendo dalla elevazione a potenza 4 ( numero_max_cifre - 1 ) della base.
Il numero di cui si vogliono ricavare le cifre viene diviso per la potenza massima della base. In questo risulta che la parte intera è la cifra che stavamo cercando.
Dopo di che il nuovo numero diventa il resto della divisione precedente.
Questo numero verrà diviso per la potenza della base decrementata di uno.
L'algoritmo si deve ripetere fino a quando il risultato dell'elevazione a potenza vale 1.
Forse mi spiego meglio con un esempio pratico.
Prendiamo in input il numero 1234.
1234 = 10^4 * 0 + 10^3 * 1 + 10^2 * 2 + 10^1 * 3 + 10^0 * 4
Bene. (escludendo il caso di 10^4)
1234/1000 = 1,234 (la parte intera vale 1)
Adesso per trovare l'altra cifra dobbiamo prendere il resto della precendente operazione. Per far ciò utilizziamo l'operazione modulo (%).
1234%1000 = 234
234/100 = 2,34 (la parte intera vale 2)
234%100 = 34
34/10 = 3,4 (la parte intera vale 3)
34%10 = 4
4/1 = 4 (fine algoritmo)
dnclover
19-10-2006, 17:05
La teoria non è molto difficile.
Tutto dipende dal sistema di numerazione posizionale. (http://it.wikipedia.org/wiki/Numerazione_posizionale)
Ora, il mio algoritmo non fa altro che scovare le cifre del numero partendo dalla elevazione a potenza 4 ( numero_max_cifre - 1 ) della base.
Il numero di cui si vogliono ricavare le cifre viene diviso per la potenza massima della base. In questo risulta che la parte intera è la cifra che stavamo cercando.
Dopo di che il nuovo numero diventa il resto della divisione precedente.
Questo numero verrà diviso per la potenza della base decrementata di uno.
L'algoritmo si deve ripetere fino a quando il risultato dell'elevazione a potenza vale 1.
Forse mi spiego meglio con un esempio pratico.
Prendiamo in input il numero 1234.
1234 = 10^4 * 0 + 10^3 * 1 + 10^2 * 2 + 10^1 * 3 + 10^0 * 4
Bene. (escludendo il caso di 10^4)
1234/1000 = 1,234 (la parte intera vale 1)
Adesso per trovare l'altra cifra dobbiamo prendere il resto della precendente operazione. Per far ciò utilizziamo l'operazione modulo (%).
1234%1000 = 234
234/100 = 2,34 (la parte intera vale 2)
234%100 = 34
34/10 = 3,4 (la parte intera vale 3)
34%10 = 4
4/1 = 4 (fine algoritmo)
Grazie tante BlackCat,era proprio la spiegazione che cercavo!
Sei stato molto chiaro,grazie ancora! :)
trallallero
20-10-2006, 08:15
La teoria non è molto difficile.
Tutto dipende dal sistema di numerazione posizionale. (http://it.wikipedia.org/wiki/Numerazione_posizionale)
Ora, il mio algoritmo non fa altro che scovare le cifre del numero partendo dalla elevazione a potenza 4 ( numero_max_cifre - 1 ) della base.
Il numero di cui si vogliono ricavare le cifre viene diviso per la potenza massima della base. In questo risulta che la parte intera è la cifra che stavamo cercando.
Dopo di che il nuovo numero diventa il resto della divisione precedente.
Questo numero verrà diviso per la potenza della base decrementata di uno.
L'algoritmo si deve ripetere fino a quando il risultato dell'elevazione a potenza vale 1.
Forse mi spiego meglio con un esempio pratico.
Prendiamo in input il numero 1234.
1234 = 10^4 * 0 + 10^3 * 1 + 10^2 * 2 + 10^1 * 3 + 10^0 * 4
Bene. (escludendo il caso di 10^4)
1234/1000 = 1,234 (la parte intera vale 1)
Adesso per trovare l'altra cifra dobbiamo prendere il resto della precendente operazione. Per far ciò utilizziamo l'operazione modulo (%).
1234%1000 = 234
234/100 = 2,34 (la parte intera vale 2)
234%100 = 34
34/10 = 3,4 (la parte intera vale 3)
34%10 = 4
4/1 = 4 (fine algoritmo)
che figata :D
Marco Giunio Silano
20-10-2006, 15:03
che figata :D
:D
trallallero
20-10-2006, 15:17
:D
veramente, mi piace :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.