ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kaprika수 구하기(4자리 수에 대해서만)
    Algorithm with C/ETC 2020. 10. 29. 19:41

    문제

    Kaprika 수란?

    예를 들어 네 자리 숫자 2025의 가운데를 갈라보면 20과 25의 두개의 숫자가 생긴다.

    이 두개의 숫자를 더하면 45이고, 45를 제곱하면 2025가 되어 원상태로 되돌아간다.

    이러한 성질을 갖는 수를 Kaprika수 라고 한다.

    또 81은 가운데를 잘라보면 8 과 1로 갈라지고, 더하면 9가 되고 다시 제곱하면 81로 돌아간다.

    그러므로 81은 두 자리 숫자의 Kaprika수가 되는 것이다.

    네 자리 kaprika 수를 구하는 프로그램을 만들자.

     

    구현방법

    이 문제에서 첫 번째로 필요한 기능은 해당하는 수가 네 자리 수인지를 판단할 수 있어야 한다.

    이 기능을 담당할 함수의 이름을 GetNumberDigit 라고 하자. 매개변수는 현재의 수이다.

     GetNumberDigit함수

     

     

    그리고 입력받은 수의 뒤의 두자리 수를 구하는 함수부터 설계하자.

    SmallerNum함수 & SmallerNumByRecur 함수

    이 함수는 재귀함수의 호출 혹은 반복문을 통해서 구현할 수 있다.

    반복문을 통한 구현은 분석할 내용은 없고 재귀함수의 구현에 대해서만 분석한다.

    SmallerNumByRecur함수의 구현에서는 재귀함수의 탈출 조건은 2번 나눗셈이 진행되면 빠져 나오면 된다.

    그리고, 나눗셈이 한 번 진행할 때면, 나머지를 누적합을 해서 구하면 된다.

    위 함수의 매개변수는 두 번째 매개변수의 역할이 나눗셈의 진행 회수이다.

    위의 함수를 호출한 영역에서 초기에 0값을 전달하면 된다.

    그리고 세 번째 매개변수는 뒤의 두자리 수를 저장할 변수임을 의미한다.

    당연히 세 번째 매개변수의 초기에는 0값으로 세팅되어 있어야 한다.

    나눗셈이 진행이 아예 안된 상태라면 해당 수를 나눈 나머지를 바로 누적합을 하면 된다.

    그리고 나눗셈이 한 번 진행이 되어있을 때는 자리수에 10을 곱해서 누적합을 하면 된다.

     

     

    그리고 입력받은 수의 앞의 두자리 수를 구하는 함수부터 설계하자.

    이 함수는 재귀함수의 호출 혹은 반복문을 통해서 구현할 수 있다.

    BiggerNum함수 & BiggerNumByRecur함수

    반복문을 통한 구현은 분석할 내용은 없고 재귀함수의 구현에 대해서만 분석한다.

    BiggerNumByRecur함수의 매개변수들은 위의 SmallerNumByRecur함수와 같다.

    다만 마지막 매개변수는 앞 두 자리수를 저장하는 변수이다.

    그러고 나서 두 번 나눈 몫을 저장하면 된다.

     

     

    위에서 구현한 함수들이 모두 제 기능을 하고 있는지 살펴보자.

    아래는 메인함수의 내용이며, 그 출력결과를 알아보자.

    프로그램 실행결과

     

     

    그리고, 4자리 숫자임이 확실한 상태에서 해당하는 수가 이제 Kaprika 수인지 알아봐야 한다.

    이 알아보는 함수의 이름을 CheckKaprikaNum 라고 하자.

    이 함수는 매개변수로 넘겨받은 수가 Kaprika 수라면 1을 리턴하고, 아니면 -1을 리턴하도록 설계하자.

    CheckKaprikaNum 함수에서는 먼저 4자리 수의 뒤 두 자리수를 먼저 구하자.

    2자리로 이루어진 뒷 수를 저장하기 위한 변수의 이름을 smaller이라 하고,

    2자리로 이루어진 앞 수를 저장하기 위한 변수의 이름을 bigger라고 두자.

    입력받은 수가 4321이라고 한다면 smaller 에는 21이, bigger에는 43이 저장된다.

    그리고 이 smaller와 bigger의 합의 제곱이 입력수와 같다면 이는 Kaprika 수이다.

    CheckKaprikaNum함수

    아래는 나머지 메인 함수 및 실행결과이다.

    프로그램 실행결과

     

    소스 파일

    Kaprika.c
    0.00MB

     

    'Algorithm with C > ETC' 카테고리의 다른 글

    A* 알고리즘  (0) 2021.03.19
    요술 사각형  (0) 2020.10.27
    배열에 중복 없이 랜덤으로 숫자 저장하기  (0) 2020.10.20
    비트 연산자 문제  (0) 2020.10.17
    달팽이 배열  (0) 2020.09.21

    댓글

Designed by Tistory.