Получить число цифр в int

Как я могу определить длину целого числа? В случае, если у меня есть le: int test (234567545);

Как я знаю, как долго int? Как сказать, что в нем 9 цифр???

* Я пробовал: **

char buffer_length[100];


    //  assign directly to a string.

    sprintf(buffer_length, "%d\n", 234567545);

    string sf = buffer_length;


    cout <<sf.length()-1 << endl;

Но должен быть более простой способ сделать это или более чистый...

Ответы

Ответ 1

Как насчет деления:

int length = 1;
int x = 234567545;
while ( x /= 10 )
   length++;

или используйте метод log10 из <math.h>.

Примечание, что log10 возвращает double, поэтому вам придется настроить результат.

Ответ 2

Сделайте функцию:

int count_numbers ( int num) {
   int count =0;
   while (num !=0) {   
      count++;  
      num/=10;
   } 
   return count;
}

Ответ 3

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

int num = 123456;
int len = to_string(num).length();

cout << "LENGTH of " << num << " is " << len << endl;
// prints "LENGTH of 123456 is 6"

Ответ 4

если "i" - целое число, то

int len ;

char buf[33] ;

itoa (i, buf, 10) ; // or maybe 16 if you want base-16 ?

len = strlen(buf) ;

if(i < 0)
    len-- ;    // maybe if you don't want to include "-" in length ?

Ответ 5

Вы можете использовать stringstream для этого, как показано ниже

stringstream ss;
int i = 234567545;
ss << i;
cout << ss.str().size() << endl;

Ответ 6

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

    int i=2384995;
    char buf[100];

    itoa(i, buf, 10); // 10 is the base decimal

    printf("Lenght: %d\n", strlen(buf));


    return 0;
}

Помните, что itoa не является стандартной функцией, даже если она поддерживается многими компиляторами.

Ответ 7

просматривая через Интернет общую ошибку, чтобы сделать ошибку инициализации переменной счетчика равной 0, а затем ввести тестирование цикла перед циклом до тех пор, пока счетчик не будет равен 0. Цикл do-while идеально подходит, чтобы избежать этого.

    unsigned udc(unsigned u) //unsigned digit count
    {
      unsigned c = 0;
      do
        ++c;
      while ((u /= 10) != 0);
      return c;
    }

вероятно, более дешево проверить, меньше ли u 10, чтобы избежать команд необработанного деления, приращения и cmp для случаев, когда u < 10.

но пока на этой теме, оптимизации, вы можете просто проверить u на постоянные полномочия десять.

    unsigned udc(unsigned u) //unsigned digit count
    {
      if (u < 10)   return 1;
      if (u < 100)  return 2;
      if (u < 1000) return 3;
      //...
      return 0; //number was not supported
    }

который сохраняет ваши 3 инструкции на цифру, но менее адаптируется для разных оснований, а не для того, чтобы быть не столь привлекательным, и утомительно писать вручную, и в этом случае вы предпочитаете писать рутину для напишите процедуру перед ее вставкой в ​​вашу программу. потому что C поддерживает только очень конечные числа, 64 бит, 32 бит, 16 бит, 8 бит, вы можете просто ограничить себя максимум при создании подпрограммы для всех размеров.

для учета отрицательных чисел, вы просто отрицаете u, если u < 0 перед подсчетом числа цифр. конечно, сначала создавая стандартную поддержку подписанных номеров.

если вы знаете, что u < 1000, возможно, проще просто написать вместо написания подпрограммы.

   if (u > 99) len = 3;
   else
   if (u > 9)  len = 2;
   else        len = 1;

Ответ 8

len = 1 + floor (log10 (n));//С++ code lib (cmath)