2010-10-06 61 views
8

Tôi đã tự hỏi nếu có một cách để nhân các biến số BigInteger với nhau, bởi vì toán tử * không thể áp dụng cho BigInteger.Sử dụng toán tử BigInteger Multiply

Vì vậy, tôi đã tự hỏi liệu có thể nhân hai số BigIntegers với nhau mà không sử dụng toán tử * hay không.

+0

Nhà khai thác chỉ hoạt động trên các đối tượng nếu nó có thể đi qua [autoboxing] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html). Những người duy nhất có thể làm điều đó là các biểu diễn lớp cho các kiểu nguyên thủy (int -> Integer). –

Trả lời

16

Bạn sử dụng BigIntegersmultiply() phương pháp như vậy:

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

tôi nên đã chỉ ra một khoảng thời gian trước đó BigInteger là không thay đổi. Vì vậy, bất kỳ kết quả của một hoạt động phải được lưu trữ vào một biến. Toán tử hoặc toán hạng không bao giờ thay đổi.

+0

Nếu điều này quá khó chịu, bạn có thể làm việc trong Groovy để ánh xạ chính xác các toán tử. Tôi đang thực hiện một số lớp toán (BigRational cho một) và lần đầu tiên Java dường như cực kỳ cồng kềnh - Mặc dù tôi thường yêu Java, tôi phải thừa nhận rằng nó không phải là câu trả lời cho mọi vấn đề lập trình. Nếu bạn cần tốc độ của Java nhưng muốn có những ưu điểm như Operator Overloading bạn cũng có thể thử Scala. –

+0

Trong dòng đoạn cuối, không chỉ là "int2" là đủ như đối số được truyền cho nhân? Đó là một BigInteger sau khi tất cả. – amar

+1

@amar Cảm ơn bạn đã chỉ ra điều đó. Tôi không chắc mình đang nghĩ gì. Có thể là lỗi sao chép-dán. – jjnguy

1

Bạn có thể sử dụng phương thức nhân (BigInteger) trong BigInteger. Vì vậy:

BigInteger result = someBigInt.multiply(anotherBigInt); 

BigInteger in Java API

3

dễ dàng hơn cách để thực hiện:

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

Kết quả nhân những yếu tố cụ thể

A: 131224324234234234234313

B: 13345663456346435648234313

Có thể là cái này (Tôi hy vọng tôi đúng):

R: 1751275668516575787795211751170772134115968581969

Cả hai đều được coi là hai số nguyên dương. Và kỹ thuật được sử dụng là phương pháp của Karatsuba

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

+1

Điều này không giải quyết được câu hỏi. – hotzst

Các vấn đề liên quan