当不确定 long 中有多少位数字时,获取 Long 的第一位数字

Get the first digit of a Long when not sure how many digits will be in the long

我正在尝试获取 Long 的第一个数字,但我从用户那里得到的 Long 长度将在 13 到 16 位之间 我如何在不知道确切长度的情况下获得第一个数字

一个数字的位数只有(int)log_10(n)。因此,与 n 位数相同的 10 的幂是 (int)pow(10, (int)log_10(n))

因此,最后一位数字只是 n / (int)pow(10, (int)log_10(n))

在 Java 中转换为:

long n = 8797123456789L;
long numDigs = (long)Math.log10(n);
long lastDigit = n / (long)Math.pow(10, numDigs);
System.out.println(lastDigit);

>> 8

只要把它格式化成一个字符缓冲区,然后得到第一个。只有当这成为性能瓶颈时,才回来寻求更复杂的解决方案。

在Java中:

// assuming the number is non-negative, 
// otherwise need to deal with sign
String firstDigit = String.valueOf(myLong).substring(0,1);

你提到这是 Java。在 Java(以及许多基于 C 的语言)中,整数除法 returns 一个整数并丢弃余数。这意味着当您有一个多位数(换句话说,大于 9)时,您可以除以 10 以删除最后一位。你最终得到的是一个单一数字,它是原始数字的第一位数字:

if ( myLong < 0 ) {
    myLong *= -1;
}
while ( myLong > 9 ) {
    myLong /= 10;
}