Pregunta

Estoy trabajando en un programa en C como parte de la Tarea en la que tengo para obtener el producto de dos números que se toma como cadena de caracteres.por ejemplo:123456789021 y 132456789098.Ya que es tomado como una cadena, que les convierten en long long int para la multiplicación.Pero el producto resultante será muy grande(mayor que el de long long int supongo).Puede alguien por favor, me sugieren un método para realizar esta multiplicación?

¿Fue útil?

Solución

Esto es uno de los enfoques: Considere cómo se multiplican estos números a mano, en papel. Implementar este método en C. Usted tendrá que descubrir:

  • cómo romper un número entero (representado como una cadena) en dígitos
  • cómo convertir cada dígito de nuevo a un número entero 0 <= d < 10
  • cómo manejar conjuntos de dígitos (es decir. Cuán grande debe hacer los arreglos?)
  • cómo escribir el bucle (s) puede que tenga que poner en práctica la multiplicación
  • cómo gestionar la realización de productos de un solo dígito al siguiente
  • cómo convertir esos dígitos volver a los caracteres de salida

Otros consejos

por lo general grandes enteros representados como matrices de bytes.Usted puede mirar en Microsoft BigInteger aplicación en el DLR.Creo que se han utilizado algoritmos desarrollados por Knuth

BigInteger biblioteca y una muy básico código de ejemplo del mundo de los Siete.

Si está interesado en algunos de mis códigos caseras en C (sólo multiplicación):

////////////////////////////////////////////////////////////////////////////////

Code removed after I checked the home-work tag ;)

///////////////////////////////////////////////////////////////////////////////////////

Esto funciona en algunos de los concursos de programación anteriores había participado;) Pero si usted está buscando para el algoritmo de multiplicación aún más rápido se puede implementar Karatsuba algoritmo , yo personalmente uso esto ahora en concurso de tiempo real.

¡Oye, mira esto, Me acaba de terminar el día que antaño como parte de mi tarea:

#include<stdio.h>
#include<string.h>

int main()
{
    char one[195];
    char two[195];
    char temp[195];
    int a[195],c[195],b[195];
    int x,i,j,k,l,p,add;

    for(;;)/*determining the larger number...*/
    {
        printf("Input A:");
            gets(one);
        printf("Input B:");
            gets(two);

        k=strlen(one);
        l=strlen(two);
        if(l>k)
        {
            strcpy(temp,one);
            strcpy(one,two);
            strcpy(two,temp);
            break;
        }
        else
        {
            break;
        }
    }
        k=strlen(one);
        l=strlen(two);
    for(p=0;p<195;p++)/*assigning all initial values to 0*/
    {
        a[p]=0;
        b[p]=0;
        c[p]=0;
    }

    for(i=0;one[i];i++)/*converting char to integer(note:1,as a character assigned as 49.)*/
    {
        a[i]=((one[--k])-48);
    }

    for(i=0;i<two[i];i++)
    {
        b[i]=((two[--l])-48);
    }


    for(i=0;i<=strlen(two);i++)/*main algorithm*/
    {
        add=0;
        p=0;
        for(j=i;j<=(2*strlen(one)-1);j++)
        {
            x=c[j]+b[i]*a[p]+add;
            c[j]=x%10;
            add=x/10;
            p++;
        }
    }

    printf("\nMultiplication:");
    for(p=(2*strlen(one)-1);p>=0;p--)
    {
        if(p>strlen(one)&&c[p]==0)
        {
            continue;
        }
        printf("%d",c[p]);
    }
    printf("\n");
}

Puede utilizar una biblioteca de gran Arithmetik número entero, Wikipedia tiene una lista aquí .

Otro enfoque sería multiplicar los números de flotación / doble y stip de la decimal cuando se muestran los resultados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top