2013-03-23 13 views
8

Wykryłem liczbę cyfr na numerze. Na przykład 329586 ma cyfry 6.Najszybszy sposób na uzyskanie liczby cyfr na numerze?

Co mogę zrobić, to po prostu parsowania numer do łańcucha, a uzyskanie długość ciągu, jak:

number.toString().length() 

Ale tam jest najszybszym sposobem policzyć cyfry na liczby? Muszę używać tej metody kilka razy, więc myślę, że użycie toString() może wpłynąć na wydajność.

Dzięki.

+1

liczby znaczy liczbę całkowitą? –

Odpowiedz

35
Math.floor(Math.log10(number) + 1) 
// or just (int) Math.log10(number) + 1 

Na przykład:

int number = 123456; 
int length = (int) Math.log10(number) + 1; 
System.out.println(length); 

WYJŚCIE:

6 
+1

@downvoter Czy możesz mi powiedzieć, dlaczego -1? :) –

+3

To nie jest najszybszy sposób, zobacz tę odpowiedź: http://stackoverflow.com/questions/1306727/way-to-get-nig-digits-in-an-int/1308407#1308407 – gaborsch

+1

Ta metoda potrzebuje liczby == 0 kasety do obsłużenia osobno. –

7

jak o tym homebrewed rozwiązania:

int noOfDigit = 1; 
while((n=n/10) != 0) ++noOfDigit; 
+0

To też zadziałało, dziękuję! : D – BloodShura

0

Spróbuj tego:

Working Example

public class Main { 
    public static void main(String[] args) { 
     long num = -23; 
     int digits = 0; 
     if (num < 0) 
      num *= (-1); 
     if (num < 10 && num >= 0) 
      digits = 1; 
     else { 
      while(num > 0) { 
       num /= 10; 
       digits++; 
      } 
     } 
     System.out.println("Digits: " +digits); 
    } 
} 
+2

Dziękuję też! : D Ale, mówiąc po prostu, to nie zadziała dla 0 i 1 ... – BloodShura

+0

Teraz będzie działać dla 0, 1, a także dla liczb ujemnych. – Zelldon

+2

dla 10, to zwróci 1! – Saeed

Powiązane problemy