Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pino1952 en 14 de Octubre 2014, 19:42
-
Hola a todos.
Tengo que hacer una operación de multiplicación con resultado mayor a 50 dígitos,
consultando a él sabelotodo google me entero que se puede hacer de estas 2 maneras:
…puedes hacerlo byte a byte.
O hacer la multiplicación como un bucle de sumas.-
La segunda la logré, pero la primera apenas estoy en los inicios de la suma binaria, la ayuda que les solicito es la siguiente:
Si tengo estas 2 variables
char a[] = “32456987”, b[] = “23654”;
¿Cómo debo hacer para transformarlas a byte/bits? .-
Desde ya muchas gracias por el tiempo, Saludos.
Daniel
-
Puedes probar con:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define MAX 10000
char * multiply(char [],char[]);
int main(){
char a[MAX];
char b[MAX];
char *c;
int la,lb;
int i;
printf("Introduzca el primer numero : ");
scanf("%s",a);
printf("Introduzca el segundo numero : ");
scanf("%s",b);
printf("Resultado de la multiplicacion : ");
c = multiply(a,b);
printf("%s",c);
return 0;
}
char * multiply(char a[],char b[]){
static char mul[MAX];
char c[MAX];
char temp[MAX];
int la,lb;
int i,j,k=0,x=0,y;
long int r=0;
long sum = 0;
la=strlen(a)-1;
lb=strlen(b)-1;
for(i=0;i<=la;i++){
a[i] = a[i] - 48;
}
for(i=0;i<=lb;i++){
b[i] = b[i] - 48;
}
for(i=lb;i>=0;i--){
r=0;
for(j=la;j>=0;j--){
temp[k++] = (b[i]*a[j] + r)%10;
r = (b[i]*a[j]+r)/10;
}
temp[k++] = r;
x++;
for(y = 0;y<x;y++){
temp[k++] = 0;
}
}
k=0;
r=0;
for(i=0;i<la+lb+2;i++){
sum =0;
y=0;
for(j=1;j<=lb+1;j++){
if(i <= la+j){
sum = sum + temp[y+i];
}
y += j + la + 1;
}
c[k++] = (sum+r) %10;
r = (sum+r)/10;
}
c[k] = r;
j=0;
for(i=k-1;i>=0;i--){
mul[j++]=c[i] + 48;
}
mul[j]='\0';
return mul;
}
-
Hola Mastermind.
En primer lugar muchas gracias por ocuparte del tema, te cuento lo que me pasa con tú código , al crear el .exe me sale una caja del antivirus que me advierte que tengo un virus, lo corrí 3 veces y en las tres me ocurrió lo mismo, otra cosita, ¿tu programa no tiene nada que ver con una multiplicación byte a byte es con un bucle de sumas?, de ser así es lo que ya logré y me funciona, lo que necesito es multiplicar byte a byte.-
Un gran abrazo.
Daniel
-
Es extraño que te indique presencia de virus, no sé por qué puede estar haciendo eso. Para multiplicar byte a byte tendrías que ponerte ejemplos de cómo harías operaciones sencillas e implementar esos ejemplos para luego hacerlo con operaciones de números largos. Aquí tienes una referencia: http://codegolf.stackexchange.com/questions/2009/long-multiply-8-bits-at-a-time
Saludos