접두사 찾기
https://www.acmicpc.net/problem/2028
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 128 MB | 2219 | 1235 | 1077 | 62.254% |
문제
어떤 자연수 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
출처
ICPC > Regionals > Asia Pacific > Korea > Nationwide Internet Competition > Seoul Nationalwide Internet Competition 2006 B번
- 문제의 오타를 찾은 사람: kyo20111
알고리즘 분류
통과된 코드
#include <iostream> #include <cstdlib> #include <string> using namespace std; int main() { ios_base::sync_with_stdio(false); // scanf와 동기화를 비활성화 // cin.tie(null); 코드는 cin과 cout의 묶음을 풀어줍니다. cin.tie(NULL); cout.tie(NULL); int T, N; cin >> T; while (T--) { string A, B; cin >> N; A = to_string(N); B = to_string(N * N); for (int i = 0; i < A.length(); i++) { if (A[A.length() - i - 1] != B[B.length() - i - 1]) { cout << "NO" << "\n"; break; } if (i == A.length() - 1) cout << "YES" << "\n"; } } return 0; }