I have a number like this: int num = 36729; and I want to get the number of digits that compose the number (in this case 5 digits).
How can I do this?
I have a number like this: int num = 36729; and I want to get the number of digits that compose the number (in this case 5 digits).
How can I do this?
Use this formula:
if(num)
  return floor(log10(abs((double) num)) + 1);
return 1;
 
    
    int digits = 0;
while (num > 0) {
  ++digits;
  num = num / 10;
}
 
    
    int unsigned_digit_count(unsigned val) {
    int count = 0;
    do {
        count++;
        val /= 10;
    } while (val);
    return count;
}
int digit_count(int val) {
    if (val < 0) {
        return 1+unsigned_digit_count(-val); // extra digit for the '-'
    } else {
        return unsigned_digit_count(val);
    }
}
 
    
    unsigned int number_of_digits = 0;
do {
    ++number_of_digits; 
    n /= base;
} while (n);
Not necessarily the most efficient, but one of the shortest and most readable using C++:
std::to_string(num).length()
And there is a much better way to do it:
#include<cmath>
...
int size = trunc(log10(num)) + 1
...
 
    
    int findcount(int num) 
{ 
    int count = 0; 
    if(num != 0){
      while(num) { 
          num /= 10; 
          count ++; 
      } 
      return count ; 
    }
    else
      return 1;
} 
 
    
    For any input other than 0, compute the base-10 logarithm of the absolute value of the input, take the floor of that result and add 1:
int dig;
...
if (input == 0)
  dig = 1;
else
  dig = (int) floor(log10(abs((double) input))) + 1;
0 is a special case and has to be handled separately.
 
    
    Inefficient, but strangely elegant...
#include <stdio.h>
#include <string.h>
int main(void)
{
    // code to get value
    char str[50];
    sprintf(str, "%d", value);
    printf("The %d has %d digits.\n", value, strlen(str));
    return 0;
}
