PDA

Ver la Versión Completa : Una división que me tiene bloqueado.


Nopatic
06-04-2004, 16:24:00
Necesito conocer el resto de una división. Visto así parece muy sencillo se utiliza el "mod" y ya está, pero el problema que me tiene bloqueado es que tengo que saber el resto de una división con un numero de 26 dígitos y no lo consigo hacer.
ejemplo:

00120345030000067890142800 / 97 el resto sería 91

¿ como puedo saber el resto ?

Gracias a todos
Saludos

sanxpue
06-04-2004, 21:14:25
Esperemos que te sirva esta funcion...
un poco maquiavelica pero jala je


Function Division(CNum : String;Dividir : Int64) : LongInt;
Const
Entero64 = 999999999999999999;
Var
Mayores,Menores : Extended;
ModMen,ModMay,ModConst : Int64;
Begin
If Length(CNum) > 18 Then
Begin
//quitamos primero los nulos
While CNum[1] = '0' Do
Delete(CNum,1,1);
//Sacamos a los que no podamos transformar en entero
Mayores := StrToFloat(Copy(CNum,1,Length(CNum)-18));
//Sacamos a los que podemos transformar en Enteros
Menores := StrToFloat(Copy(CNum,Length(CNum)-17,10000));
//Ahora sabemos que los mayores
//es igual a mayores por la const Entero64
//mas mayores
//Sacamos primero el modulo de los menores
ModMen := Trunc(Menores) MOD Dividir;
//Sacamos el modulo de los mayores
ModMay := Trunc(Mayores) MOD Dividir;
//Sacamos el modulo de la constante
ModConst := Entero64 MOD Dividir;
//lo multiplicamos por las veces que usamos la constante
ModConst := ModConst * Trunc(Mayores);
//Sumamos los sobrantes y sacamos el resultado
Result := (ModMen+ModMay+ModConst) MOD Dividir;
//y listo.. listo
End;
//y si no es mayor entonces eso ya es facil
End;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
Dividir : Int64;
CNum : String;
begin
CNum := '00120345030000067890142800';
Dividir := 97;
ShowMessage(IntToStr(Division(CNum,Dividir)));
end;


Como siempre a sus ordenes y siempre con buena cara
saludos

Nopatic
07-04-2004, 10:15:47
Funciona de lujo, aunque parece mentira me has sacado de un gran problema, te debo un almuerzo, si alguna vez te pasas por Valencia, mandame un correo que te invito.

Saludos

sanxpue
07-04-2004, 18:20:50
Pues si va a estar dificil eso del almuerzo ya que estoy del otro lado del charco.. me basta con que te halla servido...

Saludos..

roman
08-04-2004, 22:37:49
Pues si va a estar dificil eso del almuerzo ya que estoy del otro lado del charco.. me basta con que te halla servido...


Hombre, si la invitación incluye pasaje nos ponemos ahora mismo a programar la rutina en ensamblador para mayor rendimiento.


:D