Як палічыць колькасць лічбаў цэлага ліку?

Мне патрэбен спосаб, каб падлічыць колькасць лічбаў канкрэтнае лік мае. Ён таксама павінен працаваць для Negativ лікаў. Любыя ідэі?

3
Як бы вы вырашыць гэтую праблему на паперы?
дададзена аўтар Colonel Panic, крыніца

9 адказы

Паспрабуйце гэты код. Ён выкарыстоўвае лагарыфм па падставе 10:

public static int length(int integer) {
    if(integer==0) {
        return 1;
    } else if(integer<0) {
        return ((int)Math.log10(Math.abs(integer)))+1;
    } else {
        return ((int)Math.log10(integer))+1;
    }
}
6
дададзена
0 адна лічба. <�Я> рэальны </я> пытанне: ці ёсць -2 дзве лічбы ці толькі адзін? :-)
дададзена аўтар paxdiablo, крыніца
Добры і эфектыўны. Вы можаце замяніць вяртання ((INT) Math.log10 (Math.abs (цэлае))) + 1; па вяртання ((INT) Math.log10 (цэлалікавых)) + 1;
дададзена аўтар assylias, крыніца
З'яўляецца 0 адзін або нуль лічбаў?
дададзена аўтар Alexandre Lavoie, крыніца
Гэта будзе трываць няўдачу з Integer.MIN_VALUE. Звычайна забываюць крайні выпадак: Integer.MIN_VALUE == -Integer.MIN_VALUE.
дададзена аўтар Durandal, крыніца
змяніў вяртаецца значэнне 1 для выпадку 0.
дададзена аўтар Gregoran Bregovic, крыніца
(n < 0) ? String.valueOf(n).length() - 1 : String.valueOf(n).length();
5
дададзена
Не будзе працаваць для адмоўных лікаў ...
дададзена аўтар Alexandre Lavoie, крыніца
<�Код> - будзе лічыцца лічба, так павінна быць нешта накшталт колькасць <0? String.valueOf (нумар) .length() - 1: String.valueOf (нумар) .length ();
дададзена аўтар Alexandre Lavoie, крыніца
Дзякуй за вашыя прапановы, фіксаваных гэтыя выпадкі.
дададзена аўтар Adam Siemion, крыніца
<�Код> 0 гэта адна лічба, на мой погляд, і гэта тое, што гэты код вырабляе ў такім выпадку :)
дададзена аўтар Adam Siemion, крыніца
Проста трэба праверыць, калі нумар менш 0. Ня радковае значэнне. :)
дададзена аўтар Achrome, крыніца
Як наконт нуля? Хутчэй філасофскае пытанне ... ;-)
дададзена аўтар Hans Frankenstein, крыніца

Функцыя Абсалютная значэнне пазбавіцца ад - калі існуе, то астатняя падобны на іншыя адказы.

String.valueOf(Math.abs(number)).length();
3
дададзена
Вы б'яце мяне да гэтага ;-)
дададзена аўтар Scary Wombat, крыніца

Самы хуткі спосаб:

    public final static int[] sizeTable = { 9, 99, 999, 9999, 99999, 999999,
        9999999, 99999999, 999999999, Integer.MAX_VALUE };

    public static int getSize(int d) {
    if (d == Integer.MIN_VALUE)
        return 10;
    if (d < 0) {
        d = -d;
    }
    for (int i = 0;; i++)
        if (d <= sizeTable[i])
            return i + 1;
}

Ён натхнёны Integer :

 static int stringSize(int x) {
    for (int i=0; ; i++)
        if (x <= sizeTable[i])
            return i+1;
}
2
дададзена
Хутчэй, чым гэта было б бінарны пошук, але на самой справе не варта :)
дададзена аўтар Marko Topolnik, крыніца
Збой з Integer.MIN_VALUE
дададзена аўтар Durandal, крыніца
public class Test
{
     public static void main(String []args)
     {
         int n = 423;
         int count = 0;

         while(n != 0) 
         {
             n = n/10;
             count++;
         }
         System.out.println(count);
     }
}
0
дададзена

Гэта павінна працаваць:

digitCount = String.valueof(number).length();
if(number < 0 ) digitCount--;
0
дададзена
public static int integerLength(int n)
{
 return Math.abs(n).toString().length();
}
0
дададзена
Збой з Integer.MIN_VALUE
дададзена аўтар Durandal, крыніца

Падлік лічбаў шляхам дзялення не да нуля рэшткаў (гэта можа быць лёгка адаптаваная для любой сістэмы злічэння, ці доўга, толькі змяняючы дэкларацыю аргументу).

public static int countDigitsDiv(int value) {
    if (value == 0)
        return 1;
    int result = 0;
   //we work with negative values to avoid surprises with Integer.MIN_VALUE
    if (value > 0)
        value = -value;
   //count the number of digits
    while (value < 0) {
        result += 1;
        value /= 10;
    }
    return result;
}

Выкарыстанне Math.log10() (Гэта не будзе працаваць належным чынам, калі значэнне паўторна абвешчана да таго часу, з-за двайнік абмежаванай дакладнасці):

public static int countDigitsLog(int value) {
    int result = 1;
    if (value > 0) {
        result += (int) Math.log10(value);
    } else if (value < 0) {
        result += (int) Math.log10(-((double) value));
    }
    return result;
}
0
дададзена
 Integer i=new Integer(340);
      if(i<0)
      System.out.println(i.toString().length()-1);
      else
          System.out.println(i.toString().length()); 
0
дададзена