Ver Mensaje Individual
  #5  
Antiguo 17-04-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 11
aguml Va por buen camino
Se me ocurre algo asi:
Código PHP:
#include <intypes.h>

bool dividirHex(AnsiString dividendoAnsiString divisorAnsiString *cocienteAnsiString *Resto)
{
   
__uint64 auxDividendoauxDivisorauxCociente=0auxResto=0;
   
bool salir=false;
   
bool retval=false;
   
int largoDividendolargoDivisorlargoPorcionpos;
   *
cociente="";
   *
resto="";
   
largoDivisor=divisor.Lenght();
   
auxDivisor=sprintf("%UINT64"AnsiString ("0x" divisor).c_str ());

   do {
      
largoDividendo=dividendo.Lenght ();
      
largoPorcion=largoDivisor;
      if (
largoDividendo >= largoDivisor){
         if(
auxDivisor sprintf("%UINT64"AnsiString ("0x" dividendo.SubString(1,largoPorcion)).c_str()){
            if(
largoDividendo largoDivisor){
               
largoPorcion++;
            }else{
               break;
            }
         }
         
auxDividendo=sprintf("%UINT64"AnsiString ("0x" dividendo.SubString(1,largoPorcion)).c_str());
         
auxResto=auxDividendo auxDivisor;
         
dividendo=dividendo.SubString(largoPorcionlargoDividendo);
         
auxCociente=auxDividendo auxDivisor;
         *
cociente=*cociente AnsiString (auxCociente);
         *
resto=AnsiString(auxResto);
          if (
auxResto 0)
            
dividendo= *resto dividendo.SubString(largoPorcion,largoDividendo);
         else
            
dividendodividendo.SubString(largoPorcion,largoDividendo);
         
retval=true;
      }else{
         
salir=true;
      }
   }while(!
salir);
   return 
retval;

Lo he escrito en el móvil y no está probado. ¿que os parece? Creo que lo que le faltaría es saber si el cociente desborda el int64 y si es así salir con false pero no se como comprobar eso. Supongo que seria obteniendo el valor máximo de un int64 y luego comparó carácter por carácter contra la cadena del cociente de izquierda a derecha mientras sean iguales hasta llegar al último o hasta que sea mayor el del dividendo. Si es mayor salgo del bucle y retorno false. Si es menor salgo del bucle y continuo con lo demás.

Última edición por aguml fecha: 17-04-2015 a las 13:05:26.
Responder Con Cita