Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/03/2010, 11:20
Avatar de AnesGy
AnesGy
 
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 15 años
Puntos: 19
Respuesta: Calcular números decimales a bases elevadas

Acabo de entender a que te referías, un sec que te respondo. Perdona por la respuesta anterior.

Para convertir dicimal a una base alta es relativamente simple.

Primero tienes que crear un índice de símbolos. Por ejemplo el decimal tiene la siguiente equivalencia ('1' es un símbolo y 1 es un valor):

'0'->0, '1'->1, '2'->2, ... , '9'->9

El Hexadecimal tiene algo parecido solo que:

'0'->0, '1'->1, '2'->2, ... , '9'->9, 'A'->10, ... ,'F'->16

Bueno pues tu tienes que crearte un índice con valores de 39, 33, 70 carácteres. Cual es tu problema, que 70 es un número increíble de carácteres y o usas las tildes y los símbolos raros, o vas a tener que repeitr números, que es lo que hace la página (cada conjunto 17, es como un símbolo que vale 17).

Te voy a explicar el sistema para este último método que no necesita que la base sea pequeña, ni definir el índice.

Entonces definimos la base, por ejemplo, la enesimal (n)

Código PHP:
Ver original
  1. funciton base_enesimal($num,$n=70){ //Esto es una función que pasa el número $num
  2.  //a la base enesimal (siendo el valor por defecto $n=70.
  3.  $result = "";
  4.  while($num > 0){
  5.   $result = ($num % $n).",".$result; //Esto añade el carácter seguido de una , al inicio de la cadena
  6.  $num = intval($num/$n); //Esto modifica el número que usamos para quitar el carácter que hemos extraido.
  7.  }
  8.  return substr($result,0,-1); //esto quita la coma que aparecería al final y devuelve el resultado.
  9. }

Luego para deshacer el cambio se usa:

Código PHP:
Ver original
  1. funciton enesimal_a_decimal($str,$n=70){
  2.  $result = 0;
  3.  $str = explode(",",$str); //dividimos la cadena en sus carácteres
  4.  $j = 0;
  5.  foreach($str as $i) $result += $i*pow($n,$j); //esto invierte el algoritmo.
  6.  return $result;
  7. }
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it

Última edición por AnesGy; 29/03/2010 a las 02:06 Razón: Terminar de añadir el código.