0

以下是我为在 Java 中查找 n^n 的前 k 位而编写的代码

private static int firstK(int n,int k)
{
   double x, y;
   x = n * Math.log10(n);
   y = Math.floor(Math.pow(10, x - Math.floor(x) + k - 1));
   return((int)y);
}

但是,当我输入 n=99999999 和 k=9 时,Java 中的结果是 367879457,但原始答案应该是 367879443。为什么它显示错误的结果?它与 Java 中 double 的精度有关吗?使用 BigDecimal 给出相同的结果。对代码有什么建议吗?顺便说一句,n<=10^9 和 k<=9。

4

1 回答 1

0

双精度大约有 16 位十进制数字。x大约是 8e8,因此当您计算x - Math.floor(x)(小数部分)时,您会得到一个仅精确到大约 7 或 8 位的数字。所以结果不能精确到8位以上。

于 2013-11-18T23:51:58.820 回答