2010-10-06 13 views
8

Mi chiedevo se ci fosse un modo per moltiplicare le variabili BigInteger insieme, perché l'operatore * non può essere applicato a BigInteger.Utilizzo dell'operatore BigInteger Multiply

Quindi mi chiedevo se fosse possibile moltiplicare due BigIntegers insieme senza utilizzare l'operatore *.

+0

Gli operatori lavorano solo sugli oggetti se possono passare attraverso [autoboxing] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html). Gli unici che possono farlo sono le rappresentazioni di classe per i tipi primitivi (int -> Integer). –

risposta

16

si utilizza BigIntegersmultiply() metodo in questo modo:

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

avrei fatto notare qualche tempo fa che BigInteger è immutabile. Quindi qualsiasi risultato di un'operazione deve essere memorizzato in una variabile. L'operatore o l'operando non vengono mai modificati.

+0

Se questo diventa troppo fastidioso, puoi lavorare in Groovy che mappa correttamente gli operatori. Sto implementando alcune classi matematiche (BigRational per una) e per la prima volta Java è sembrato estremamente ingombrante - Sebbene io generalmente ami Java, devo ammettere che non è la risposta ad ogni problema di programmazione. Se hai bisogno della velocità di Java ma desideri vantaggi come Overloading dell'operatore potresti provare anche Scala. –

+0

Nell'ultima riga di frammento, non è solo "int2" è sufficiente come argomento passato per moltiplicare? Dopo tutto è un BigInteger. – amar

+1

@amar Grazie per avermelo fatto notare. Non sono sicuro di cosa stavo pensando. Probabilmente un errore di copia-incolla. – jjnguy

1

È possibile utilizzare il metodo di moltiplicazione (BigInteger) in BigInteger. Quindi:

BigInteger result = someBigInt.multiply(anotherBigInt); 

BigInteger in Java API

3

Più facile modo per implementare:

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

Il risultato moltiplicando questi fattori specifici

A: 131224324234234234234313

B: 13345663456346435648234313

Potrebbe essere questa (spero non sbaglio):

R: 1751275668516575787795211751170772134115968581969

Entrambi sono considerati essere due numeri interi positivi. E la tecnica utilizzata era metodo Karatsuba

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

+1

Questo non risolve la domanda. – hotzst

Problemi correlati