動的に数値の桁数分のchar配列を用意したい場合のように数値の桁数を求めたいことがあります。
このような場合に桁数を取得する方法について説明します。

数値の桁数を求めるには、log10()関数を利用します。
この関数は、指定した引数の10を基底とする対数(常用対数)であるlog10を返します。
log10は、10の何乗すれば引数の値になるのかを表すため、何桁で表現できるかを求めることができます。

以下、サンプルコード。

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

/*******************************************************************************
* エントリー関数
*******************************************************************************/
int main(int argc, char* argv[]){
printf("*** Start Sample! ***\n");

//1024の桁数を取得する
int num = 1024;
printf("val=%ld\n", num);
printf("log10(%ld)=%lf\n", LONG_MAX , log10(num));
printf("size=%ld\n", (int)log10(num) + 1);

//最大値の桁数を取得する
printf("val=%ld\n", LONG_MAX);
printf("log10(%ld)=%lf\n", LONG_MAX , log10(LONG_MAX) + 1);
printf("size=%ld\n", (int)log10(LONG_MAX) + 1);

printf("*** End Sample! ***\n");

return 0;
}


上記サンプルの説明です。
1024とLONG_MAXの桁数を取得しています。
標準出力には、引数に指定する値、log10の実際の戻り値、引数の桁数の順で表示しています。

1024を引数にした場合を例に説明すると、log10(1024)の戻り値は、3.010300になります。
これは、1000(10の3乗)≦1024≦10000(10の4乗)の範囲となるので、4桁あれば表現できるということになります。
そのため、log10の戻り値+1した4桁が算出できたということになります。
(理屈としては、10の何乗すればということになるので、戻り値の整数部+1したものがlog10()関数に指定した引数の桁数となります)