반응형
카프레카 상수에 대한 개념 정리는 다음 포스팅을 참고하고,
지금 포스팅은 카프레카 상수를 구현하는 코드을 알아보자.
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
'디지털포렌식(Digital forensic) > 숫자' 카테고리의 다른 글
원의 지름에 대한 원주비율, 정확한 π(파이) 값 (1) | 2023.12.07 |
---|---|
[파일] MAC Address(물리적 주소) 구조와 추출 코드(C#) (1) | 2023.12.05 |
신비한 숫자, 카프레카(Kaprekar) 상수 (1) | 2023.12.03 |
[리스트]국제 전화 국가 코드 (0) | 2023.10.24 |
[파일] 6/45 번호 생성 앱 (1) | 2023.10.16 |