Java在int中找到第二个前导数字

时间:2019-08-12 18:23:14

标签: java

我正在研究一个Java问题,其中我需要检查任意大小的int的第二个前导数字(例如:123中的“ 2”或58347中的“ 8”)是否是特定数字(例如“ 2”或“ 5”),然后将true分配给布尔值(如果是该数字)。我正在尝试做模/除数方法,但是如果数量很大,我将无法提取第二个前导数字。

我搜索了Stack Overflow,发现了一个非常相似的问题。但是,如果数字被硬编码为两位数,则该问题的解决方案将起作用。我知道有一种将int转换为String的方法,并且我成功地尝试了该方法,但是我需要使用int / modulo / division方法。我尝试做(n%100)/ 10;但它让我倒数第二位(例如:4562374中的“ 7”),而不是倒数第二位。

// n is a number such as 123, or 25, or 52856.
while (n > 0) { 
int i=((n%10)/10);
if( (i==2)||(i==3) || (i==5)|| (i==7) )
{ secondDigit=true; }
else { secondDigit= false; } }
System.out.println(secondDigit);

3 个答案:

答案 0 :(得分:2)

只要保持除以10直到数字<100,然后对10做模,例如:

class Main {
  public static void main(String[] args) {
    int n = 58347;
    while (n >= 100) {
      n /= 10;
    }
    System.out.println(n % 10); // prints 8
  }
}

答案 1 :(得分:0)

不确定这种方法的效率,但是它易于阅读。

pages

但是,您必须确保该数字超过1位。

答案 2 :(得分:0)

与其反复地对数字进行除法直到它足够小以供您处理,不如找出数字有多大,以便只需要进行一次除法?

我的意思是,您应该考虑使用对数来找出数字的大小。找出数字的以10为底的对数,即可得出其幅值。对于100,log_10为2,因此您可以执行以下操作:

long magnitude = Math.log10(number);
long divisor = Math.pow(10, magnitude - 1);
long smallNumber = number / divisor;
int digit = smallNumber % 10;