2010-01-03 14 views
6

Jak pomnożyć dwie bardzo duże liczby większe niż 32 znaki, na przykład mnożenie 100! z 122! lub 22^122 z 11^200 przy pomocy dzielenia i podbijania, czy jakiekolwiek ciało ma kod java lub kod C#?Szybkie mnożenie bardzo dużych liczb całkowitych

+0

retagged z odpowiednimi językami –

+0

Przeczytaj o algorytmach mnożenia: http://en.wikipedia.org/wiki/Multiplication_algorithm – przemoc

+0

"dziel i rządź" brzmi jak strona domowa k. W razie potrzeby prześlij ponownie. –

Odpowiedz

0

Napisałem jeden, który używa Arrays, aby to osiągnąć, tylko dla zabawy. Sądzę, że klasa Java w języku BigInteger robi to samo.

Here to przykład w języku C#, który może ci się przydać.

3

Powinieneś prawdopodobnie używać java.math.BigInteger. Pozwala to na reprezentację wartości całkowitych znacznie przekraczających 2^32 lub nawet 2^64. Wartości BigInteger są zasadniczo ograniczone jedynie ilością pamięci dostępnej dla programu, tj. ~ 4 GB w systemie 32-bitowym i prawie dostępną fizyczną + wirtualną pamięcią dla systemów 64-bitowych.

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: Oto BigInteger factorial function jeśli zajdzie taka potrzeba

+0

tak, i dla C# rozważyć intX, http://www.codeplex.com/IntX/ –

+2

Po prostu zauważ, że BigInteger używa naiwnego algorytmu mnożenia, więc jeśli potrzebujesz FAST mnożenia dużych liczb, należy korzystać z biblioteki innej firmy, która używa Karatsuby lub innego algorytmu podrzędnego^2. – Voo

Powiązane problemy