vuoi
o PayPal
tutte le volte che vuoi
Il programma permette di trasformare un numero n in base b1 nello stesso numero espresso pero' in base b2 (n, b1, b2 dati dall'utente).
Breve esempio di esecuzione:
1 Conversione tra basi arbitrarie.
2 Inserire la base di partenza (2-36): 18
3 Inserire il numero da convertire, espresso in base 18: 12fhb4c
4 Inserire la base in cui esprimere il numero: 13
5 Il numero, convertito in base 13, vale: 823bb1c
#include <string>
using namespace std;
#ifndef BASE_LIB
#define BASE_LIB
string base_a_base(string&, int, int);
unsigned int valore_del_char(char);
#endif
#include <math.h>
#include <string>
#include "es_6b_lib.h"
using namespace std;
string base_a_base(string& numero, int base_from, int base_to){
const string SIMBOLI = "0123456789abcdefghijklmnopqrstuvwxyz";
unsigned long int num=0;
int i;
for (i=numero.length()-1;i>=0;i--)
num+=((long unsigned int)((pow(base_from,(numero.length()-i-1)))) *
valore_del_char(numero[i]));
// la conversione in numero vero e proprio e' fatta..
// ora si ritrasforma num in una stringa...
string res = "";
// l'estremo superiore del for fa il calcolo di qual e'
// la cifra non-nulla piu' significativa di num nella nuova base
int cifra;
for(i=((int)(log(num+1)/log(base_to))); i >= 0;i--){
cifra = ((unsigned long int)(num/pow(base_to,i))) % base_to;
// calcolo della cifra (numericamente) alla posizione i
res = res + SIMBOLI[cifra];
// e concatenazione del simbolo corrispondente alla stringa
risultato
}
return res;
/* Nota:
per come e' programmata questa funzione, non verranno rilevati errori
dando una stringa come "4ab" e dicendo che e' espressa in base 2...
volendo, si poteva modificare la funzione valore_del_char in modo che
non andasse oltre la cifra i-esima (i=base entrante) di SIMBOLI nel
cercare il simbolo dato (per fare cio', sarebbe stato necessario passare
alla funzione valore_del_char anche b_from...) */
}
unsigned int valore_del_char(char simbolo){
const string SIMBOLI = "0123456789abcdefghijklmnopqrstuvwxyz";