我有一个数字(64位int),想知道它是否是10的纯幂。也就是说,1后面跟着0个或多个零。 有没有一种有效的方法来做到这一点,不涉及将其转换为字符串?
<小时/>目前我正在这样做:
Kotlin
fun isPowerOf10(n: Long): Boolean {
val logN = Math.log10(myInt.toDouble())
return logN != Math.floor(logN)
}
Java
static boolean isPowerOf10(long n) {
double logN = Math.log10((double) myInt);
return logN != Math.floor(logN);
}
但是由于 isPowerOf10(999_999_999_999_999_999)
(以及负版本)失败,因为转换为 double 并采用 log10
时精度损失,它输出精确 18.0
。
最佳答案
你可以做的是一个简单的 while 循环:
static boolean isPowerOf10(long n) {
while(n > 1 && n % 10 == 0){
n /= 10;
}
return n == 1;
}
或者可能更好,检查 10 本身的幂,因为长 (ref) 中只有 19 个。 :
public static boolean isPowerOf10(long n) {
return
n == 1L
|| n == 10L
|| n == 100L
|| n == 1000L
|| n == 10000L
|| n == 100000L
|| n == 1000000L
|| n == 10000000L
|| n == 100000000L
|| n == 1000000000L
|| n == 10000000000L
|| n == 100000000000L
|| n == 1000000000000L
|| n == 10000000000000L
|| n == 100000000000000L
|| n == 1000000000000000L
|| n == 10000000000000000L
|| n == 100000000000000000L
|| n == 1000000000000000000L;
}
关于java - 在 Kotlin 或 Java 中如何判断一个数字是否是 10 的幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43289478/