ohimaru’s blog

暇な時にMarkdownで書く感じ

C/C++で数値の桁数を返す

一般的に数値の桁数を返す方法としては
数値が0にならない間10で割り続けられる回数をカウントという方法ですが、
視点を変えて常用対数を求めるlog10を利用するとパパっと求める事が出来ます。
大きい桁数の時はlog10で見て、 x < 数値 < yの間になるから~みたいな奴です。
多分数学でやったと思います。多分・・・・・・・。
注意点としては、log10がそもそもdouble型を利用して、小数で値を返すので 問題が整数ならば、int型に変換し、1少ない値になっているので+1する必要があるという点と、
<math.h>をincludeする必要があります。

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

int main(void)
{
    int num,ans;
    printf("数値を入力 :");
    scanf("%d",&num);
    ans = (int)log10((double)num) + 1;
    printf("入力した数値の桁数は%d桁でした",ans); 
    return 0;
}
//実行結果
10
2桁
100
3桁

整数が大きければintをunsignedとかまぁ色々やって下しあ。

追伸

色々調べていたらはてなの4年前記事に
他言語で正攻法と文字列法で速度を調べている人が居た。 http://d.hatena.ne.jp/UDONCHAN/20101117/1290000497
その人も対数計算の場合をツッコミされててエントリを追加してた。
http://d.hatena.ne.jp/UDONCHAN/20101118/1290087886