디지털포렌식(Digital forensic)/숫자
[파일] 카프레카(Kaprekar) 상수 계산과정 C# 코드
이정욱교수
2023. 12. 3. 01:19
반응형
카프레카 상수에 대한 개념 정리는 다음 포스팅을 참고하고,
지금 포스팅은 카프레카 상수를 구현하는 코드을 알아보자.
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 이상에서 사용할 수 있다.
728x90