2010-10-06 109 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