Способ получить количество цифр в INT? - PullRequest
353 голосов
/ 20 августа 2009

Есть ли более точный способ получения длины типа int, чем этот метод?

int length = String.valueOf(1000).length();

Ответы [ 27 ]

2 голосов
/ 05 сентября 2018

Еще один струнный подход. Коротко и сладко - для любого целого числа n.

int length = ("" + n).length();
2 голосов
/ 01 июля 2013

Решение Мариана, теперь с троичным:

 public int len(int n){
        return (n<100000)?((n<100)?((n<10)?1:2):(n<1000)?3:((n<10000)?4:5)):((n<10000000)?((n<1000000)?6:7):((n<100000000)?8:((n<1000000000)?9:10)));
    }

Потому что мы можем.

1 голос
/ 20 августа 2009

Любопытно, я пытался это сравнить ...

import org.junit.Test;
import static org.junit.Assert.*;


public class TestStack1306727 {

    @Test
    public void bench(){
        int number=1000;
        int a= String.valueOf(number).length();
        int b= 1 + (int)Math.floor(Math.log10(number));

        assertEquals(a,b);
        int i=0;
        int s=0;
        long startTime = System.currentTimeMillis();
        for(i=0, s=0; i< 100000000; i++){
            a= String.valueOf(number).length();
            s+=a;
        }
        long stopTime = System.currentTimeMillis();
        long runTime = stopTime - startTime;
        System.out.println("Run time 1: " + runTime);
        System.out.println("s: "+s);
        startTime = System.currentTimeMillis();
        for(i=0,s=0; i< 100000000; i++){
            b= number==0?1:(1 + (int)Math.floor(Math.log10(Math.abs(number))));
            s+=b;
        }
        stopTime = System.currentTimeMillis();
        runTime = stopTime - startTime;
        System.out.println("Run time 2: " + runTime);
        System.out.println("s: "+s);
        assertEquals(a,b);


    }
}

результаты:

Run time 1: 6765
s: 400000000
Run time 2: 6000
s: 400000000

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


edit: после комментария ptomli я заменил 'number' на 'i' в приведенном выше коде и получил следующие результаты за 5 прогонов стенда:

Run time 1: 11500
s: 788888890
Run time 2: 8547
s: 788888890

Run time 1: 11485
s: 788888890
Run time 2: 8547
s: 788888890

Run time 1: 11469
s: 788888890
Run time 2: 8547
s: 788888890

Run time 1: 11500
s: 788888890
Run time 2: 8547
s: 788888890

Run time 1: 11484
s: 788888890
Run time 2: 8547
s: 788888890
0 голосов
/ 05 августа 2014

Введите число и создайте Arraylist, и цикл while запишет все цифры в Arraylist. Затем мы можем вывести размер массива, который будет длиной введенного вами целочисленного значения.

ArrayList<Integer> a=new ArrayList<>();

while(number > 0) 
{ 
    remainder = num % 10; 
    a.add(remainder);
    number = number / 10; 
} 

int m=a.size();
0 голосов
/ 03 августа 2016

Кто-то хочет сделать это главным образом потому, что он / она хочет «представить» это, что в основном означает, что в конце концов он должен быть «toString-ed» (или преобразован другим способом) явно или неявно в любом случае; прежде чем он может быть представлен (напечатан, например).

Если дело обстоит именно так, просто попробуйте явно указать необходимое toString и сосчитайте биты.

0 голосов
/ 27 июля 2016

Мы можем добиться этого, используя рекурсивный цикл

    public static int digitCount(int numberInput, int i) {
        while (numberInput > 0) {
        i++;
        numberInput = numberInput / 10;
        digitCount(numberInput, i);
        }
        return i;
    }

    public static void printString() {
        int numberInput = 1234567;
        int digitCount = digitCount(numberInput, 0);

        System.out.println("Count of digit in ["+numberInput+"] is ["+digitCount+"]");
    }
0 голосов
/ 20 декабря 2012

А как насчет этого рекурсивного метода?

    private static int length = 0;

    public static int length(int n) {
    length++;
    if((n / 10) < 10) {
        length++;
    } else {
        length(n / 10);
    }
    return length;
}
0 голосов
/ 02 декабря 2015

Простой рекурсивный способ

int    get_int_lenght(current_lenght, value)
{
 if (value / 10 < 10)
    return (current_lenght + 1);
return (get_int_lenght(current_lenght + 1, value))
}

не проверено

0 голосов
/ 18 октября 2015

Попробуйте преобразовать int в строку , а затем получите длину строки . Это должно получить длину int .

public static int intLength(int num){
    String n = Integer.toString(num);
    int newNum = n.length();
    return newNum;
}
0 голосов
/ 09 сентября 2015

Вы можете использовать цифры, используя последовательное деление на десять:

int a=0;

if (no < 0) {
    no = -no;
} else if (no == 0) {
    no = 1;
}

while (no > 0) {
    no = no / 10;
    a++;
}

System.out.println("Number of digits in given number is: "+a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...