以下是我为在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。
答案 0 :(得分:0)
双精度约为16位小数。 x
约为8e8,因此当您计算x - Math.floor(x)
(小数部分)时,您会得到一个仅精确到7或8位数的数字。因此结果不能精确到8位以上。