Categories: 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

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Pyhton】スタックやキューのように扱えるdeque(デック)の使い方

この記事では、スタックやキューのように扱…

2か月 ago

【Python】Queue(キュー)の種類と使い方

この記事では、PythonのQueue(…

3か月 ago

【Unity】イメージやテキストを等間隔で配置する方法

UnityでイメージやテキストなどのUI…

4か月 ago

【Python】フォーマット時の書式の設定

この記事では、文字列に値をフォーマットし…

9か月 ago

【Python】変数にデフォルト値を渡す方法

この記事では、変数にデフォルト値を渡す方…

9か月 ago