Algoritmo Divide y Vecnerás

diana
09 de Mayo del 2010
Tengo k implementar el algoritmo del metodo de multiplicion para enteros grandes : divide y venceras.
Pero algo falla, y realmente no encuentro en donde
Agradeceria que le echarais un vistazo
Gracias.




void productoDV (vectorP x, vectorP y, vectorP* res){

unsigned long int i;
vectorP a=NULL,b=NULL,c=NULL,d=NULL,res1=NULL,res2=NULL,res3=NULL,res4=NULL, res5=NULL;
unsigned long int j = tamVector(x);
int dato;
CrearNumero(res, 2*j);

if(tamVector(x)==1){
dato=Componente_i(x, 0)*Componente_i(y, 0);
AsignaVector(*res, 0, dato%10); // asigamos a nuestro vector el cociente y el resto, en distitas posiciones
AsignaVector(*res, 1, dato/10); // si el numero tiene mas de una cifra
}
else{

divideNum(x, &a, &b); // dividimos el 1º numero en dos vectores
divideNum(y, &c, &d); // dividimos el 2º numero en dos vectores


productoDV(a, c, &res1); // llamamos a la funcion que estamos creando (recursivo)
productoDV(a, d, &res2); // para ir multiplicando por partes los dos numeros
productoDV(b, c, &res3); // lo que seria el algoritmo divide y venceras
productoDV(b, d, &res4);

sumadesplazada(*res, res1, j); // realizamos la suma, despues de realizar los productos (de forma recursiva)
sumadesplazada(*res, res2, j/2); // tal y como el algoritmo requiere
sumadesplazada(*res, res3, j/2);
sumadesplazada(*res, res4, 0);

LiberaVector(&res1); //liberamos la memoria
LiberaVector(&res2);
LiberaVector(&res3);
LiberaVector(&res4);
LiberaVector(res);
LiberaVector(&a);
LiberaVector(&b);
LiberaVector(&c);
LiberaVector(&d);

}
}