C言語

【C言語】整数の桁数を取得する方法を解説

この記事では、C言語で整数の桁数を取得する方法を解説します。

いくつか方法を紹介しますが、最初に解説する「10で割り続けて桁数を取得する」が一番効率がよく汎用性が高いのものとなっています。

その他の方法は状況に合わせて使ってください。

それでは、桁数を取得する方法を見ていきましょう!

10で割り続けて桁数を取得する

整数の桁数を求めるには、while文を使って桁数を求めたい数値を 0 になるまで 10 で割ることで求めることができます。

#include <stdio.h>

int main(void){

    int num = 12345;
    int digit = 0;

    // 0になるまで10で割る
    while (num != 0)
    {
        num /= 10;
        // 割った回数をカウント
        ++digit; 
    }

    // 出力
    printf("桁数: %d\n", digit);
}

実行結果

桁数: 5

このプログラムでは、桁数を求めた数値が 0 になってしまうことに注意してください。元の値をそのまま残しておきたい場合は、あらかじめ退避させておく必要があります。

#include <stdio.h>

int main(void){

    int temp, num = 12345;
    int digit = 0;

    // 値を退避
    temp = num;

    // 0になるまで10で割る
    while (temp != 0)
    {
        temp /= 10;
        ++digit; 
    }

    // 出力
    printf("%dの桁数: %d\n", num, digit);
}

実行結果

12345の桁数: 5

関数を定義することでより楽に桁数を取得することができる。

#include <stdio.h>
#include <stdlib.h>

int get_digit(int n)
{
    int digit = 0;

    while (n != 0) {
        n /= 10;
        ++digit;
    };

    return digit;
}

int main(void){

    printf("桁数: %d\n", get_digit(12345));
    printf("桁数: %d\n", get_digit(8192));
    // マイナスの数値はabs関数で絶対値を渡す
    printf("桁数: %d\n", get_digit(abs(-123)));
}

実行結果

桁数: 5
桁数: 4
桁数: 3

整数の桁数を求めることができました。

常用対数で桁数を取得する

math.hlog10関数 を使うことでも整数の桁数を求めることができます。

#include <math.h>

double log10(double);

log10関数は、引数に受け取った値が10の何乗なのかを返してくれます。返される値は、桁数よりも1少ない値となっています。

なので、常用対数に1足すことで桁数を求めることができます。

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

int main(void){

    int num = 12345;

    int digit = log10(num) + 1;
    
    // 出力
    printf("桁数: %d\n", digit);
}

実行結果

桁数: 5

文字列に変換して桁数を取得する

文字列に変換することで整数の桁数を取得することができます。文字列に変換するには、snprintf関数を使います。

#include <stdio.h>

int snprintf(char* restrict s, size_t n, const char* restrict format, ...);

文字列に変換することでstring.hstrlen関数で長さを取得することができます。

#include <stdio.h>
#include <string.h>

int main(void){

    int num = 12345;
    char buf[32];

    // 文字列に変換
    snprintf(buf, 32, "%d", num);

    // 桁数の取得
    int digit = strlen(buf);
    
    // 出力
    printf("桁数: %d\n", digit);
}

実行結果

桁数: 5

文字列に変換する予定がある場合についでに桁数を取得できる。桁数だけを取得したいだけの場合には特にメリットはない。