java - 在 Kotlin 或 Java 中如何判断一个数字是否是 10 的幂?

标签 java math kotlin logarithm

我有一个数字(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/

相关文章:

java - 在 Windows 中保存文件

c# - 舍入 c# 给出错误答案

mongodb - java.lang.NoSuchFieldError : FSYNCED

kotlin - 在 Kotlin 中将枚举字段序列化为 JSON

java - Hibernate 在多线程应用程序中随机抛出 "org.hibernate.exception.JDBCConnectionException: Could not open connection"

java - 使用 JAVA 以编程方式将 S3 对象(公共(public) URL)发送至 Google 云存储

java - 看起来像 JButton 的 JRadioButton

Java/C++ - 从相机偏航(航向)和俯仰(无滚动)获取 3d 线

excel - 在每个 jar 的最大可能容量下,找到容纳最大数量 Wine 的最少 jar 数

java - 如何从 kotlin 访问枚举的 "overridden"name() 方法?