[C#] 10進数の桁数とx桁目の数を求める

[C#] 10進数の桁数とx桁目の数を求める

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を使って計算する

常用対数 – Wikipedia

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

以上。

C#カテゴリの最新記事