[실습으로 다지는 C#] 암스트롱의 수

 이번 실습에서는 암스트롱의 수를 판별하는 메서드를 만들어 봅시다.

 암스트롱의 수는 ABC = AXAXA + BXBXB + CXCXC인 정수를 말합니다. 예를 들어 153 = 1 = 125 + 27 입니다. 이러한 수를 암스트롱의 수라고 말합니다.

ABC 수식

 이러한 암스트롱의 수를 판별하는 메서드를 만들기 전에 먼저 메서드 이름과 입력 매개 변수와 리턴 형식을 결정합니다. 언제나 알고리즘은 입력 인자와 수행 결과가 어떠한 것이 올 수 있는지를 판단할 수 있어야 합니다.

 메서드 이름은 IsAmstrong으로 정할게요. 그리고 입력 인자는 판별할 정수가 필요하므로 정수형 변수 num으로 결정하고 반환은 판별 결과이므로 bool로 결정합시다.

bool IsAmstrong(int num)

이제 암스트롱의 수를 판별하는 알고리즘을 생각해 보세요. 그리고 이를 의사 코드(pseudo code)로 작성하고 주석으로 변환해 보세요.

bool IsAmstrong(int num)
{
    //조건(num이 3자리 정수가 아니라면)
        //거짓 반환
    //a := num의 100의 자리의 수
    //b := num의 10의 자리의 수
    //c := num의 1의 자리의 수
    //num2 = a의 3승 + b의 3승 + c의 3승
    //num이 num2와 같은지 판별 결과 반환
}
 이제 주석을 코드로 치환해 봅시다. 현재는 개발자가 추가 정의하는 형식이 없기 때문에 Program 클래스에 정적 메서드로 정의하세요.
static bool IsAmstrong(int num)
{
    if ((num < 100) || (num > 999))//조건(num이 3자리 정수가 아니라면)
    {
        return false;//거짓 반환
    }
    int a = num / 100;//a:= num의 100의 자리의 수
    int b = (num % 100) / 10; //b := num의 10의 자리의 수
    int c = num % 10;// c:= num의 1의 자리의 수
    int num2 = a * a * a + b * b * b + c * c * c;//num2 = a의 3승 + b의 3승 + c의 3승
    return num == num2;//num과 num2가 같은지 판별 결과 반환
}

 이제 암스트롱의 수를 구하는 로직을 작성해 봅시다. 암스트롱의 수는 세 자리 정수이므로 100에서 999 사이의 정수를 확인해 보면 모든 암스트롱의 수를 알아낼 수 있겠죠.

static void Main(string[] args)
{
    Console.WriteLine("abc=a*a*a+b*b*b+c*c*c");
    for(int i = 100; i<1000;i++)
    {
        if(IsAmstrong(i))
        {
            Console.WriteLine("{0}", i);
        }
    }
}

 실행하여 결과를 확인해 보세요.

abc=a*a*a+b*b*b+c*c*c
153
370
371
407 
//ehpub.co.kr
//실습으로 다지는 C#
//7. 암스트롱의 수
//ABC = A의 3승 + B의 3승 + C의 3승
using System;


namespace _007_암스트롱의_수
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("abc=a*a*a+b*b*b+c*c*c");
            for(int i = 100; i<1000;i++)
            {
                if(IsAmstrong(i))
                {
                    Console.WriteLine("{0}", i);
                }
            }
        }
        static bool IsAmstrong(int num)
        {
            if ((num < 100) || (num > 999))//조건(num이 3자리 정수가 아니라면)
            {
                return false;//거짓 반환
            }
            int a = num / 100;//a:= num의 100의 자리의 수
            int b = (num % 100) / 10; //b := num의 10의 자리의 수
            int c = num % 10;// c:= num의 1의 자리의 수
            int num2 = a * a * a + b * b * b + c * c * c;//num2 = a의 3승 + b의 3승 + c의 3승
            return num == num2;//num과 num2가 같은지 판별 결과 반환
        }
            
    }
}