Base (aritmetica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
wlink
Nessun oggetto della modifica
Riga 48:
Il procedimento è terminato, perché q=0.
Scrivendo i resti ottenuti a partire dall'ultimo fino al primo otteniamo il numero (1552)<sub>6</sub> che è il numero cercato.
 
=== Implementazione dell'algoritmo ===
Segue un'implementazione dell'algoritmo per la conversione di base di un numero.
<source lang='Cpp'>
// Converti il valore 'from_value', scritto in base 'from_base', in base 'to_base', e salva il risultato in 'to_value'
bool tobase(char *from_value, char *to_value, int from_base, int to_base)
{
double value = 0;
int value_size;
for (value_size = 0; from_value[value_size] != '\0'; ++value_size);
for (int pos = 0, exp = value_size-1; exp >= 0; ++pos, --exp)
{
if (!(from_value[pos]-'0')) continue;
if (from_value[pos] >= '0' && from_value[pos] <= from_base-1+'0') value += pow(from_base, exp)*(from_value[pos]-'0');
else if (from_value[pos] >= 'A' && from_value[pos] <= from_base-11+'A') value += pow(from_base, exp)*(from_value[pos]-'A'+10);
else if (from_value[pos] >= 'a' && from_value[pos] <= from_base-11+'a') value += pow(from_base, exp)*(from_value[pos]-'a'+10);
else return false;
}
int digits = 0;
for (int i = 0; i < MAX_LENGTH; ++i) to_value[i] = '0';
while (value > 0)
{
int fact = value, exp;
for (exp = 0; fact/to_base>0; ++exp)
fact/=to_base;
if (!digits) digits = exp;
value -= pow(to_base, exp)*fact;
if (fact > 9) to_value[digits-exp] = 'A' + fact-10;
else to_value[digits-exp] = '0' + fact;
}
to_value[digits+1] = '\0';
return true;
}
</source>
 
==Generalizzazioni del concetto di base==