当不确定 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;
}
我正在尝试获取 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;
}