2010-01-03 86 views
6

Cómo multiplicar dos números muy grandes de más de 32 caracteres, por ejemplo, la multiplicación de 100! con 122! o 22^122 con 11^200 con la ayuda de dividir y conquistar, ¿algún cuerpo tiene código Java o código C#?Multiplicación rápida de enteros muy grandes

+0

regrabado con idiomas relevantes –

+0

Lea acerca de los algoritmos de multiplicación: http://en.wikipedia.org/wiki/Multiplication_algorithm – przemoc

+0

"divide y vencerás" suena como homewor k. Por favor vuelva a etiquetar si es correcto. –

Respuesta

0

Escribí uno que usa Arrays para lograr eso, solo por diversión. Creo que la clase BigInteger de Java hace lo mismo.

Here es un ejemplo en C# que podría ser útil para usted.

3

Probablemente deberías usar java.math.BigInteger. Esto permite representaciones de valores enteros muy por encima de 2^32 o incluso 2^64. Los valores de BigInteger están esencialmente limitados solo por la cantidad de memoria disponible para el programa, es decir ~ 4 GB en un sistema de 32 bits y prácticamente disponible memoria física + virutal para sistemas de 64 bits.

import java.math.BigInteger; 

class Foo 
{ 
    public static void main(String args[]) 
    { 
     BigInteger bigInteger100Fact = bigFactorial(BigInteger("100")); //where bigFactorial is a user-defined function to calculate a factorial 
     BigInteger bigIntegerBar = new BigInteger("12390347425734985347537986930458903458"); 

     BigInteger product = bigIntegerFact.multiply(bigIntegerBar); 
    } 
} 

EDIT: He aquí un BigInteger factorial function si lo necesita

+0

sí, y para C# considere intX, http://www.codeplex.com/IntX/ –

+2

Solo tenga en cuenta que BigInteger está usando un algoritmo de multiplicación ingenuo, por lo que si necesita una multiplicación RÁPIDA de números grandes, uno debe usar una biblioteca de terceros que use Karatsuba u otro algoritmo sub n^2. – Voo

Cuestiones relacionadas