この記事では、C言語で整数の桁数を取得する方法を解説します。
いくつか方法を紹介しますが、最初に解説する「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.h
のlog10
関数を使うことでも整数の桁数を求めることができます。
#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.h
のstrlen
関数で長さを取得することができます。
#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
文字列に変換する予定がある場合についでに桁数を取得できる。桁数だけを取得したいだけの場合には特にメリットはない。