10進数の桁数を求める
C# で10進数の桁数を求める方法をまとめます。一番簡単なのは文字列に変換して Length を参照することですが、ここではそれ以外の方法をまとめます。
0になるまで10で割り続ける方法
0になるまで繰り返し10で割り続けることで求められます。余りは切り捨てます。
例えば12345の桁数を求めるときの計算例です。
12345 / 10 = 1234
1234 / 10 = 1234
123 / 10 = 12
12 / 10 = 1
1 / 10 = 0
0になるまで5回割り算を行っているので 12345 は 5桁の整数だということが求まりました。
実装は以下の通りです。
static int GetDigit(long n)
{
var d = 0;
do
{
d++;
n /= 10;
} while (n > 0);
return d;
}
Logを使って計算する
10を底とするnの常用対数を使うことでも桁数を求めることができます。Wikipediaにも「位(くらい)の求値」の項に記述があります。
⌊Log₁₀(n)⌋ + 1
で10進数桁数が求まります。
static int GetDigit(long n)
{
return (int)Math.Log10(n) + 1;
}
10進数のx桁目の値を求める
10進数の下位x桁目の値を求めたかったのでその方法です。
12345 の4桁目(2)を取得したい場合、10³で割ってから10で余り(1桁目の数)をとると、欲しい値が取得できます。
12345 / 1000 = 12
12 % 10 = 2
こんな感じです。実装は整数nとdを受け取って結果を返す関数にしました。
static int Digit(long n, int d)
{
return (int)(n / (long)Math.Pow(10, d - 1) % 10);
}
static void Main(string[] args)
{
var list = new int[]
{
1, 12, 123, 1234,12345,
};
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"整数: {list[i]}");
Console.WriteLine($"桁数: {GetDigit(list[i])}");
for (int j = 1; j <= i + 1; j++)
{
Console.WriteLine($" {j}桁目: {Digit(list[i], j)}");
}
}
}
出力はこんな感じになります。
整数: 1
桁数: 1
1桁目: 1
整数: 12
桁数: 2
1桁目: 2
2桁目: 1
整数: 123
桁数: 3
1桁目: 3
2桁目: 2
3桁目: 1
整数: 1234
桁数: 4
1桁目: 4
2桁目: 3
3桁目: 2
4桁目: 1
整数: 12345
桁数: 5
1桁目: 5
2桁目: 4
3桁目: 3
4桁目: 2
5桁目: 1
以上。
コメントを書く