Нахождение длины целого числа в C - PullRequest
54 голосов
/ 18 июня 2010

Хотелось бы узнать, как найти длину целого числа в C.

Например:

  • 1 => 1
  • 25 => 2
  • 12512 => 5
  • 0 => 1

и т. Д.

Как это сделать в C?

Ответы [ 23 ]

2 голосов
/ 31 января 2017

Вы можете использовать это -

(data_type) log10 (имя переменной) + 1

ex:

len = (int) log10 (number) +1;

1 голос
/ 18 июня 2010

Довольно просто

int main() {
    int num = 123;
    char buf[50];

    // convert 123 to string [buf]
    itoa(num, buf, 10);

    // print our string
    printf("%s\n", strlen (buf));

    return 0;
}
1 голос
/ 18 июня 2010
sprintf(s, "%d", n);
length_of_int = strlen(s);
0 голосов
/ 08 января 2019

Пожалуйста, найдите мой ответ в одной строке кода:

#include <stdio.h> int main(void){ int c = 12388884; printf("length of integer is: %d",printf("%d",c)); return 0; }

это просто и умно!Upvote, если вам это нравится!

0 голосов
/ 25 декабря 2018
int returnIntLength(int value){
    int counter = 0;
    if(value < 0)
    {
        counter++;
        value = -value;
    }
    else if(value == 0)
        return 1;

    while(value > 0){
        value /= 10;
        counter++;
    }

    return counter;
}

Я думаю, что этот метод хорошо подходит для этой задачи:

значение и ответы:

  • -50 -> 3 // это будет считаться как один символ, если вы не хотите считать минус затем уберите counter ++ из 5-й строки.

  • 566666 -> 6

  • 0 -> 1

  • 505 -> 3

0 голосов
/ 24 октября 2018

Это относится как к отрицательным, так и к положительным инициаторам

    int get_len(int n)
    {
        if(n == 0)
        return 1;

        if(n < 0)    
        {
           n = n * (-1); // if negative
        }

        return  log10(n) + 1;
    }

Та же логика применима к циклу

  int get_len(int n)
  {
       if(n == 0)
       return 1;

       int len = 0;
       if(n < 0)
       n = n * (-1);

       while(n > 1)
       {
          n /= 10;
          len++;
       }

       return len;
  }
0 голосов
/ 13 сентября 2018

int main (void) { без знака int n, размер = 0;

printf("get the int:");
scanf("%u",&n);

/*the magic*/
for(int i = 1; n >= i; i*=10){
    size++;
}

printf("the value is: %u \n", n);
printf("the size is: %u \n", size);

return 0;

}

0 голосов
/ 18 августа 2018

Более подробный способ - использовать эту функцию.

int length(int n)
{
    bool stop;
    int nDigits = 0;
    int dividend = 1;
    do
    {
        stop = false;
        if (n > dividend)
        {
            nDigits = nDigits + 1;
            dividend = dividend * 10;
        }
        else {
            stop = true;
        }


    }
    while (stop == false);
    return nDigits;
}
0 голосов
/ 26 октября 2014
int intlen(int integer){
    int a;
    for(a = 1; integer /= 10; a++);
    return a;
}
0 голосов
/ 12 сентября 2014

Мой путь:

Делите, пока число не делится больше на 10:

u8 NumberOfDigits(u32 number)
{
    u8 i = 1;
    while (number /= 10) i++;

    return i;
}

Я не знаю, насколько это быстро по сравнению с другими предложениями ..

...