我需要找到非常大的乘法(每个约300位)的位数。我想知道是否有一个技巧可以预测产品没有实际执行计算的位数。
答案 0 :(得分:22)
可以通过两个被乘数的base 10 log加上1的舍入(下)总和来计算完全的位数,如下所示:
public static void main(String[] args) {
DecimalFormat f = new DecimalFormat("#");
double num1 = 12345678901234567890d;
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");
}
输出:
12345678901234567000 * 314159265358979 = 3878509413969699000000000000000000, which has 34 digits
这适用于任意大数字。
答案 1 :(得分:6)
Cristobalito的回答几乎得到了它。让我更准确地说“约”:
假设第一个数字有n个数字,第二个数字有m。它们可能的最低值分别为10 ^(n-1)和10 ^(m-1)。该产品将是最低的,并且将是10 ^(m + n-2),即m + n-1位。
最高可能分别为10 ^ n - 1和10 ^ m - 1。该产品将是最高的,并且将是10 ^(n + m) - 10 ^ n - 10 ^ m + 1,其最多具有m + n个数字。
因此,如果您将n位数乘以m位数,则乘积将为m + n-1或m + n位。
类似的逻辑适用于其他基础,例如基数2。