Autor Tema: Multiplicación con resultados mayor a 50 dígitos [lenguaje C]  (Leído 3478 veces)

Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
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
Código: [Seleccionar]
char a[] = “32456987”, b[] = “23654”;
¿Cómo debo hacer para transformarlas a byte/bits? .- 

Desde ya muchas gracias por el tiempo, Saludos.
Daniel     
« Última modificación: 19 de Octubre 2014, 20:21 por Alex Rodríguez »
Abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Mastermind

  • Experto
  • *****
  • Mensajes: 540
    • Ver Perfil
Re:Multiplicación con resultados mayor a 50 dígitos[C]
« Respuesta #1 en: 14 de Octubre 2014, 23:31 »
Puedes probar con:

Código: [Seleccionar]
#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;
}


Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
Re:Multiplicación con resultados mayor a 50 dígitos[C]
« Respuesta #2 en: 15 de Octubre 2014, 03:55 »
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     
Abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Mastermind

  • Experto
  • *****
  • Mensajes: 540
    • Ver Perfil
Re:Multiplicación con resultados mayor a 50 dígitos[C]
« Respuesta #3 en: 15 de Octubre 2014, 08:56 »
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".