본문 바로가기
프로그램/C언어 1000제

C언어 183제] 2006년 ICPC 서울지역본선 B번 자기복제수

by 건티 2024. 11. 15.
728x90

출처 : 반크_세계유산 경복궁

 

문제]

어떤 자연수 N을 제곱했을 때, 그 제곱수의 맨 뒷자리에 원래의 수 N이 다시 나타나면, 우리는 그 수 N을 자기복제수라고 한다.

예를 들면, 5의 제곱은 52는 25이고 25의 맨 뒷자리에 원래의 수 5가 나타나므로 5는 자기복제수이다. 또 다른 예로, 76의 제곱은 5776이고 5776의 맨 뒷자리에 76이 나타나므로 76 또한 자기복제수이다.

자연수 N이 주어졌을 때, 그 수가 자기복제수인지 아닌지를 알아내는 프로그램을 작성하시오.

입력
입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 자연수 N (1 ≤ N ≤ 1000)이 주어진다.

출력
각 테스트 케이스에 대해, 주어진 자연수가 자기복제수이면 YES를 아니면 NO를 출력한다.

예제 입력 1 
4
1
6
76
89

예제 출력 1 
YES
YES
YES
NO


출처 : 백준_2028번

 

참고풀이]

#include <stdio.h>

int main()
{
   int T;//test 수를 입력받는다.
   int N;
   int i;

   scanf("%d",&T);
   if(T>=1 && T<=20)
   {
      //테스트 수만큼 반복한다.
      for(i=1; i<=T; i++)
      {
         //임의의 자연수를 입력받는다. 
         scanf("%d",&N);
         if(N>=1 && N<=1000)
         { 
            //N을 제곱하고 그 제곱의 맨 뒷자리 수가
            //원래의 수 N이 되면 N을 자기복제수라고 한다.
            if(N<10)
               printf("%s\n",((N*N)%10==N) ? "YES" : "NO");
            else if(N<100)
               printf("%s\n",((N*N)%100==N) ? "YES" : "NO");
            else if(N<1000)
               printf("%s\n",((N*N)%1000==N) ? "YES" : "NO");
            else
               printf("%s\n",((N*N)%1000==N) ? "YES" : "NO");
         }
      }
   }
   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 봄

 

반응형

댓글