#include #include #include int ibdg(long long n) { switch (n) { case 1LL ... 9LL: return 1; case 10LL ... 99LL: return 2; case 100LL ... 999LL: return 3; case 1000LL ... 9999LL: return 4; case 10000LL ... 99999LL: return 5; case 100000LL ... 999999LL: return 6; case 1000000LL ... 9999999LL: return 7; case 10000000LL ... 99999999LL: return 8; case 100000000LL ... 999999999LL: return 9; case 1000000000LL ... 9999999999LL: return 10; case 10000000000LL ... 99999999999LL: return 11; case 100000000000LL ... 999999999999LL: return 12; case 1000000000000LL ... 9999999999999LL: return 13; case 10000000000000LL ... 99999999999999LL: return 14; case 100000000000000LL ... 999999999999999LL: return 15; case 1000000000000000LL ... 9999999999999999LL: return 16; case 10000000000000000LL ... 99999999999999999LL: return 17; case 100000000000000000LL ... 999999999999999999LL: return 18; case 1000000000000000000LL ... 9223372036854775807LL: return 19; case -9223372036854775807LL-1LL ... -1LL: return 20; } return 0; } int ubdg(unsigned long long n) { switch (n) { case 1ULL ... 9ULL: return 1; case 10ULL ... 99ULL: return 2; case 100ULL ... 999ULL: return 3; case 1000ULL ... 9999ULL: return 4; case 10000ULL ... 99999ULL: return 5; case 100000ULL ... 999999ULL: return 6; case 1000000ULL ... 9999999ULL: return 7; case 10000000ULL ... 99999999ULL: return 8; case 100000000ULL ... 999999999ULL: return 9; case 1000000000ULL ... 9999999999ULL: return 10; case 10000000000ULL ... 99999999999ULL: return 11; case 100000000000ULL ... 999999999999ULL: return 12; case 1000000000000ULL ... 9999999999999ULL: return 13; case 10000000000000ULL ... 99999999999999ULL: return 14; case 100000000000000ULL ... 999999999999999ULL: return 15; case 1000000000000000ULL ... 9999999999999999ULL: return 16; case 10000000000000000ULL ... 99999999999999999ULL: return 17; case 100000000000000000ULL ... 999999999999999999ULL: return 18; case 1000000000000000000ULL ... 9999999999999999999ULL: return 19; case 10000000000000000000ULL ... 18446744073709551615ULL: return 20; } return 0; } int main(int argc, char **argv) { unsigned int i; unsigned long long v = 1; v = 1; for (i = 1; i <= 20; i++) { printf("%lld : %d\n", (long long) v, ibdg((long long)v)); v *= 10; } v = 1; for (i = 1; i <= 20; i++) { printf("%llu : %d\n", v, ubdg(v)); v *= 10; } return 0; }