java中指数的前k个数字

时间:2013-10-18 00:31:07

标签: java algorithm exponent largenumber

以下是我为在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会得到相同的结果。有关代码的任何建议吗? BTW n <= 10 ^ 9且k <= 9。

1 个答案:

答案 0 :(得分:0)

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