본문 바로가기

디지털포렌식(Digital forensic)/숫자

[파일] 카프레카(Kaprekar) 상수 계산과정 C# 코드

반응형

 

카프레카 상수에 대한 개념 정리는 다음 포스팅을 참고하고,

지금 포스팅은 카프레카 상수를 구현하는 코드을 알아보자.

 

using System;

class Program
{
    static void Main()
    {
        int number = 6387; // 4자리 숫자를 입력한다.
        int kaprekarConstant = 6174;

        int steps = PerformKaprekarRoutine(number, kaprekarConstant);

        Console.WriteLine($"Number of steps to reach Kaprekar constant {kaprekarConstant}: {steps}");
    }

    static int PerformKaprekarRoutine(int number, int kaprekarConstant)
    {
        int steps = 0;

        while (number != kaprekarConstant && number != 0)
        {
            int[] digits = GetDigits(number);
            Array.Sort(digits);
            int ascending = ConcatenateDigits(digits);

            Array.Sort(digits, (a, b) => b.CompareTo(a));
            int descending = ConcatenateDigits(digits);

            number = descending - ascending;
            steps++;

            Console.WriteLine($"Step {steps}: {descending} - {ascending} = {number}");
        }

        return steps;
    }

    static int[] GetDigits(int num)
    {
        int numDigits = (int)Math.Ceiling(Math.Log10(num + 0.5));
        int[] digits = new int[numDigits];

        for (int i = numDigits - 1; i >= 0; i--)
        {
            digits[i] = num % 10;
            num /= 10;
        }

        return digits;
    }

    static int ConcatenateDigits(int[] digits)
    {
        int result = 0;

        foreach (int digit in digits)
        {
            result = result * 10 + digit;
        }

        return result;
    }
}

 

 

 


 

위 파일은 아래에서 다운할 수 있다. .NET 2022 이상에서 사용할 수 있다.

 

ConsoleApp4.zip
0.18MB

 

728x90