2010-10-06 12 views
8

Ich frage mich, ob es eine Möglichkeit gibt, BigInteger Variablen zu multiplizieren, weil der Operator * nicht auf BigInteger angewendet werden kann.Verwenden von BigInteger Multiply-Operator

Also fragte ich mich, ob es möglich war, zwei BigIntegers zusammen zu multiplizieren, ohne den Operator * zu verwenden.

+0

Operatoren arbeiten nur an Objekten, wenn sie [Autoboxing] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html) durchlaufen können. Die einzigen, die das können, sind die Klassendarstellungen für die primitiven Typen (int -> Integer). –

Antwort

16

Sie verwenden BigIntegersmultiply() Methode wie folgt:

BigInteger int1 = new BigInteger("131224324234234234234313"); 
BigInteger int2 = new BigInteger("13345663456346435648234313"); 
BigInteger result = int1.multiply(int2) 

ich vor wies darauf hin, eine Weile haben sollte, dass BigInteger unveränderlich ist. Daher muss jedes Ergebnis einer Operation in einer Variablen gespeichert werden. Der Operator oder Operand wird niemals geändert.

+0

Wenn das zu nervig wird, können Sie in Groovy arbeiten, das die Operatoren korrekt abbildet. Ich implementiere einige Mathe-Klassen (BigRational für eine) und Java zum ersten Mal extrem schwerfällig. Obwohl ich Java generell liebe, muss ich zugeben, dass es nicht die Antwort auf jedes Programmierproblem ist. Wenn Sie Java-Geschwindigkeit benötigen, aber Vorteile wie Operator Overloading haben möchten, können Sie auch Scala ausprobieren. –

+0

In der letzten Snippet-Zeile ist nicht nur "int2" ausreichend als Argument übergeben zu multiplizieren? Es ist schließlich ein BigInteger. – amar

+1

@amar Danke, dass du das gezeigt hast. Ich bin mir nicht sicher, was ich dachte. Wahrscheinlich ein Copy-Paste-Fehler. – jjnguy

1

Sie können die Multiplikation (BigInteger) -Methode in BigInteger verwenden. Also:

BigInteger result = someBigInt.multiply(anotherBigInt); 

BigInteger in Java API

3

einfache Art und Weise zu implementieren:

int i = 5; 
BigInteger bigInt = new BigInteger("12345678901"); 
BigInteger result = bigInt.multiply(BigInteger.valueOf(i)) 
0

Das Ergebnis multipliziert diese spezifischen Faktoren

A: 131224324234234234234313

B: 13345663456346435648234313

könnte dies sein (ich hoffe, ich bin richtig):

R: 1751275668516575787795211751170772134115968581969

Beide werden zwei positive ganze Zahlen betrachtet. Und die verwendete Technik war Karatsubas Verfahren

int ab = (mul1) · 10^n + (mul3 - mul1 - mul2) * 10^n/2 + mul2;

+1

Dies geht nicht auf die Frage ein. – hotzst