2011-07-03 55 views
8

Tôi cần phải tìm số chữ số của các phép nhân rất lớn (khoảng 300 chữ số mỗi số). Tôi đã tự hỏi nếu có một mẹo để dự đoán số chữ số mà sản phẩm sẽ không thực sự thực hiện phép tính.Dự đoán số chữ số của một phép nhân

+0

Thông thường về 2 * n, trong đó n là số chữ số. – cristobalito

+1

Bạn có thể giới hạn số chữ số như sau: 'sàn (log x) * sàn (log y) <= chữ số (x * y) <= ceil (log x) * ceil (log y)' log base 10. – davin

+0

@critobalito nó nhiều hơn n + m trong đó n và m là số chữ số của mỗi biểu thức. ví dụ. '9 * 9 = 81'' 999 * 9 = 8991' – Lynch

Trả lời

22

Số chữ số có thể được tính chính xác bởi tròn (giảm) tổng các base 10 log của hai multiplicands cộng 1 như sau:

public static void main(String[] args) { 
    DecimalFormat f = new DecimalFormat("#"); 
    double num1 = 123456789d; 
    double num2 = 314159265358979d; 

    // Here's the line that does the work: 
    int numberOfDigits = (int) (Math.log10(num1) + Math.log10(num2)) + 1; 

    System.out.println(f.format(num1) + " * " + f.format(num2) + " = " + 
     f.format((num1 * num2)) + ", which has " + numberOfDigits + " digits"); 
} 

Output:

123456789* 314159265358979 = 3878509413969699000000000000000000, which has 34 digits 

Điều này sẽ làm việc cho số lượng lớn tùy ý.

+0

Điều này tốt hơn rất nhiều so với câu trả lời của tôi :) – Tom

+0

cảm ơn tất cả mọi người vì phản hồi của bạn, nhưng cái này lấy bánh. cảm ơn. – Deho

+2

Tất nhiên, nó chỉ là 'log10' nếu chúng ta muốn số * chữ số thập phân *. Nói chung, nó là 'log_k' nếu chúng ta muốn các chữ số trong hệ thống vị trí cơ sở-k. –

6

Câu trả lời của Cristobalito nhận được khá nhiều. Hãy để tôi làm cho "chính xác" chính xác hơn:

Giả sử số đầu tiên có chữ số n và số thứ hai có m. Mức thấp nhất có thể là 10^(n-1) và 10^(m-1) tương ứng. Sản phẩm đó sẽ thấp nhất có thể, và sẽ là 10^(m + n-2), đó là m + n-1 chữ số.

Mức cao nhất có thể là 10^n - 1 và 10^m - 1 tương ứng. Sản phẩm đó sẽ cao nhất có thể và sẽ là 10^(n + m) - 10^n - 10^m + 1, có nhiều nhất là chữ số m + n.

Vì vậy, nếu bạn đang nhân một số có chữ số n bằng số có chữ số m, sản phẩm sẽ có chữ số m + n-1 hoặc m + n.

Logic tương tự giữ cho các cơ sở khác, chẳng hạn như cơ số 2.

+0

Lôgarit cơ sở 10, mà các áp phích khác mô tả, là một kỹ thuật đơn giản. Tuy nhiên, bạn chỉ có thể tìm logarit cơ sở 2 và nhân với (log 2)/(log 10), khoảng 0,693. Lôgarit cơ số 2 có thể được tìm thấy mà không cần đến điểm nổi bằng cách chỉ tìm vị trí quan trọng nhất 1 trong biểu diễn nhị phân. Nếu sau đó bạn nhân với 69 và số nguyên chia cho 100, bạn nên tìm số chữ số gần đúng mà không bao giờ sử dụng bất kỳ thứ gì trừ hoạt động số nguyên. Bạn có lẽ không bao giờ nên làm điều này, vì nó có lẽ sẽ không bao giờ thực sự đáng giá. Dễ thương, mặc dù, không? –

+0

Tại sao không thêm nhận xét của bạn ở đây vào câu trả lời? –

+0

Bởi vì tôi tin rằng nó không thực sự hữu ích trong thực tế. –

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