DIGIT_マクロ

ごく単純なdefineマクロ。入れた数値の桁数が出てくる。

#define DIGIT_(a) ((int)log10((double)(a))+1)

DIGIT_(51245) = 5。
aに構造体とか入れると大変なことになるんじゃないかな。


log10(x)は、10が何乗されるとxになるかを求める関数。x=10なら一乗。x=100なら二乗。10000なら四乗。1ならゼロ乗。これを桁数求めるのに使う。
50とかだと1.なんとか乗になるので、(int)型変換で小数点を切り捨てる。
あとは出てきた数字に1を足してあげれば完了。4670 = 10の3.なんとか乗 => 3+1 = 4 ∴四桁。