2010-10-06 96 views
8

我想知道是否有將BigInteger變量乘以一起的方法,因爲*運算符不能應用於BigInteger使用BigInteger乘法運算符

所以我想知道是否有可能將兩個BigIntegers相乘而不使用*算子。

+0

如果可以通過[自動裝箱](http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html),則操作員只能處理對象。唯一可以做到的是基本類型的類表示(int - > Integer)。 – 2013-07-29 01:12:16

回答

16

你使用像BigIntegersmultiply()方法,以便:

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

我應該指出,前一陣子那BigInteger是不可改變的。所以任何操作的結果都必須存儲到一個變量中。操作符或操作數從不改變。

+0

如果這太煩人了,可以在Groovy中正確地映射操作符。我正在實現一些數學類(BigRational for one),並且第一次Java看起來非常麻煩 - 儘管我一般都喜歡Java,但我不得不承認,這不是每個編程問題的答案。如果你需要Java的速度,但想要運算符重載等優點,你也可以試試Scala。 – 2010-10-07 00:05:06

+0

在最後的片段行中,不僅僅是「int2」就足以作爲傳遞給乘法的參數嗎?畢竟它是一個BigInteger。 – amar 2013-07-27 19:49:10

+1

@amar感謝您指出。我不確定我在想什麼。可能是複製粘貼錯誤。 – jjnguy 2013-07-29 00:42:05

1

您可以使用BigInteger中的multiply(BigInteger)方法。所以:

BigInteger result = someBigInt.multiply(anotherBigInt); 

BigInteger in Java API

3

更簡單的方法來實現:

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

結果乘以這些特定的因素

答:131224324234234234234313

B:13345663456346435648234313

可能是這一個(我希望我是正確的):

R:1751275668516575787795211751170772134115968581969

兩者都被認爲是兩個正整數。並且使用的技術是Karatsuba的方法

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

+1

這並沒有解決這個問題。 – hotzst 2017-01-05 00:44:50