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:
- Is this formula for computing the number of digits of an integer correct? - Mathematics Stack Exchange { math.stackexchange.com } (partial answer)
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;
}