以下は、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。