Algorithm/baekjoon

2028 자기복제수

쿠뱃봉 2022. 2. 12. 10:45

2028번: 자기복제수 (acmicpc.net)

 

2028번: 자기복제수

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

www.acmicpc.net

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<cstring>


using namespace std;
int main() {
	cin.tie(NULL);
	cin.sync_with_stdio(false);
	int num;
	
	int fornum = 0;
	cin >> fornum;
	for (int z = 0; z < fornum; z++) {
		cin >> num;
		int cnt = 0;
		int numcopy1 = num;
		int numcopy2 = num;
		while (numcopy1 != 0) {
			numcopy1 /= 10;
			cnt++;
		}


		int* narr = new int[cnt];
		for (int i = cnt - 1; i >= 0; i--) {

			narr[i] = num % 10;
			num /= 10;

		}

		int mnum = numcopy2 * numcopy2;
		int mcnt = 0;
		int mnumcopy1 = mnum;
		while (mnumcopy1 != 0) {
			mnumcopy1 /= 10;
			mcnt++;

		}

		int* marr = new int[mcnt];
		for (int i = mcnt - 1; i >= 0; i--) {

			marr[i] = mnum % 10;
			mnum /= 10;
	
		}

		int flag = 0;
		for (int i = 0; i < cnt; i++) {
			if (marr[mcnt - cnt + i] != narr[i]) {
				flag = 1;
			
			};
		}

		if (flag == 0) {
			cout << "YES\n";
		}
		else {
			cout << "NO\n";
		}
		
	}
}