Skip to main content

dev-c99-leetcode

Date: 2025-12-20

Easy

Numbers

Count digits in unsigned integer

The approach with while loop is more idiomatic:

int digits_u32(unsigned n) {
int k = 1;
while (n >= 10) {
n /= 10;
++k;
}
return k;
}

Another trick is snprintf.

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

int main(int argc, char* argv[]) {
int value = 12345678;
int count = snprintf(NULL, 0, "%d", value);
printf("count = %d\n", count);
return 0;
}

some math:

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

int digits_u32(unsigned n) {
if (n == 0 ) return 1;
return (int)floor(log10((double)n)) + 1;
}

void main(void) {
printf("digits_u32(1234) = %d\n", digits_u32(1234));
printf("digits_u32(123456) = %d\n", digits_u32(123456));
printf("digits_u32(87654321) = %d\n", digits_u32(87654321));
}

Math references:

Or, most fun, is the Christmas tree:

int digits_count =
(n < 10) ? 1 :
(n < 100) ? 2 :
(n < 1000) ? 3 :
(n < 10000) ? 5 :
(n < 100000) ? 6 :
(n < 1000000) ? 7 :
(n < 10000000) ? 8 :
(n < 100000000) ? 9 :
(n < 1000000000) ? 10 :
(n < 10000000000) ? 11 :
-1;

Reverse digits in integer

int reverse(int n)
{
int rev = 0;
while (n != 0) {
rev = rev * 10 + (n % 10);
n /= 10;
}
return rev;
}