Ir para conteúdo
Fórum Script Brasil
  • 0

Decimal para hexadecimal


Rafaelflm

Pergunta

boa tarde galera, vi um desafio e resolvi fazer, porem não consigui acabar, eu tenho que fazer um codigo, sem usar uma função pronta que a entrada seja numeros decimais e a saida seja exadecimal

o mais dificil é saber como faz a conversão isso eu já descrobri, só não consigui por no codigo.

a regra de negocio é a seguinte:

o numero decimal 50 para virar exadecimal é feito a seguinte conta

50/16 = 3,125

pega a parde inteira 3 e guarda o resultado

e a parte decimal fica 0,125 * 16 = 2

junta-se a parte inteira com a parte decimal e o resultado é 32

mas sempre que dividir por 16 e a parte inteira for maior que 16 deve se dividir novamente e fazer o mesmo processo, ou seja usar recursividade

meu codigo é esse

<?

$numerodecimal = $_GET["numero"];

$conversao = 0; // falo que a variavel é numero

$numerodecimal = $numerodecimal / 1; // tranformo a variavel em inteiro

function decimal($numerodecimal) {

$conversao = $numerodecimal / 16; // divido o numero decimal por 16

$inteiro = intval($conversao); // pega somente a parte inteira do numero

$resto = ($inteiro - $conversao ); // pega somente a parte decimal do numero porem esse numero está negativo

$resto = $resto * - 1; // faz a parte decimal ficar positiva

$resultado2 = $resto * 16; // multiplica a parte decimal por 16

$resultado1 = $inteiro; // essa é a parte inteira que se for menor que 16 a conta acaba aqui mesmo

// mas se for maior que isso ela deve ser dividia novamente e faz o mesmo processo

// com a parte decimal etc...

switch ($resultado1) { // sempre que o resultado do inteiro ou da multiplicação da parte decimal for um numero

// entre 10 e 16 cada um tem uma letra de repredentação "10"=A, "11"=B, "12"=C, etc...

case 10:

$resultado1 = "A"; break;

case 11:

$resultado1 = "B"; break;

case 12:

$resultado1 = "C"; break;

case 13:

$resultado1 = "D"; break;

case 14:

$resultado1 = "E"; break;

case 15:

$resultado1 = "F"; break;

}

switch ($resultado2) {

case 10:

$resultado2 = "A"; break;

case 11:

$resultado2 = "B"; break;

case 12:

$resultado2 = "C"; break;

case 13:

$resultado2 = "D"; break;

case 14:

$resultado2 = "E"; break;

case 15:

$resultado2 = "F"; break;

}

print($resultado1);

print($resultado2);

}

decimal($numerodecimal);

?>

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
boa tarde galera, vi um desafio e resolvi fazer, porem não consigui acabar, eu tenho que fazer um codigo, sem usar uma função pronta que a entrada seja numeros decimais e a saida seja exadecimal

o mais dificil é saber como faz a conversão isso eu já descrobri, só não consigui por no codigo.

a regra de negocio é a seguinte:

o numero decimal 50 para virar exadecimal é feito a seguinte conta

50/16 = 3,125

pega a parde inteira 3 e guarda o resultado

e a parte decimal fica 0,125 * 16 = 2

junta-se a parte inteira com a parte decimal e o resultado é 32

mas sempre que dividir por 16 e a parte inteira for maior que 16 deve se dividir novamente e fazer o mesmo processo, ou seja usar recursividade

meu codigo é esse

<?

$numerodecimal = $_GET["numero"];

$conversao = 0; // falo que a variavel é numero

$numerodecimal = $numerodecimal / 1; // tranformo a variavel em inteiro

function decimal($numerodecimal) {

$conversao = $numerodecimal / 16; // divido o numero decimal por 16

$inteiro = intval($conversao); // pega somente a parte inteira do numero

$resto = ($inteiro - $conversao ); // pega somente a parte decimal do numero porem esse numero está negativo

$resto = $resto * - 1; // faz a parte decimal ficar positiva

$resultado2 = $resto * 16; // multiplica a parte decimal por 16

$resultado1 = $inteiro; // essa é a parte inteira que se for menor que 16 a conta acaba aqui mesmo

// mas se for maior que isso ela deve ser dividia novamente e faz o mesmo processo

// com a parte decimal etc...

switch ($resultado1) { // sempre que o resultado do inteiro ou da multiplicação da parte decimal for um numero

// entre 10 e 16 cada um tem uma letra de repredentação "10"=A, "11"=B, "12"=C, etc...

case 10:

$resultado1 = "A"; break;

case 11:

$resultado1 = "B"; break;

case 12:

$resultado1 = "C"; break;

case 13:

$resultado1 = "D"; break;

case 14:

$resultado1 = "E"; break;

case 15:

$resultado1 = "F"; break;

}

switch ($resultado2) {

case 10:

$resultado2 = "A"; break;

case 11:

$resultado2 = "B"; break;

case 12:

$resultado2 = "C"; break;

case 13:

$resultado2 = "D"; break;

case 14:

$resultado2 = "E"; break;

case 15:

$resultado2 = "F"; break;

}

print($resultado1);

print($resultado2);

}

decimal($numerodecimal);

?>

as regras do hexadecimal estão incompletas no seu codigo, divide por pela base 16 até zera e inverse a orden dos numeros e pega os simbolos.

aqui vai um exemplo

function CalcularExa($Numero)
                    {
                     $Simbolos=array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
                     $Base=16;
                     if(is_numeric($Numero))
                       {
                        do{
                           (empty($Quociente)) ? ($Quociente=$Numero/$Base) : ($Quociente/=$Base);
                           $Int=(int)$Quociente;
                           $Res=$Quociente-$Int;
                           $restos[]=($Base*$Res);
                           $Quociente=(int)$Quociente;
                          }
                           while($Quociente>0);
                           $restos=array_reverse($restos);
                          foreach($restos as $key => $ns)
                                 {
                                  $s.=$Simbolos[$ns];
                                 }
                        $r=$s;
                        unset($Simbolos,$Base,$Numero,$Quociente,$Int,$Res,$restos,$s);
                       }
                        else
                       {
                        $r="O paramentro informado não é um numero.";
                       }
                     return $r;
                    }
                    
 echo "Resultado é ".CalcularExa(23870);

Qualquer duvida é so postar ai até mais.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...