개발/문제풀이
Code. 프로젝트 오일러. KR 4번. C++ordi2016. 9. 25. 14:08
프로젝트 오일러 KR 4번.
세자리 수를 곱해 만들 수 있는 가장 큰 대칭수
문제 출처.
http://euler.synap.co.kr/prob_detail.php?id=4
요점.
대칭수(Palindrome) ex)101, 45754, 9005009
하지만 중요한건 3자리 수, 두개를 곱해서 가장 큰 대칭 수를 만들어야 한다는 것이다.
풀이 방법.
<A : 101 ~ 999> * <A ~ 999>를 일단 순차적으로 돌렸다.
두번째 피연산자의 범위가 첫번째 피연사자인 A로 시작하는 이유는
예를들어 101 * 102 = 102 * 101 이기 때문에,
같은 결과를 두번 반복하는 짓을 막기 위해서이다.
그리고 그걸 계산한 수를 어느 곳에 저장(est_num).
그걸 어느 변수(temp)에 저장해 뒤집는다.
뒤집는 수는 rev_num에 저장하고,
rev_num과 est_num이 같다면,
est_num은 대칭수!
이과정을 통해 est_num의 최대값을 찾아내면 된다.
코드.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <iostream> using namespace std; int main() { const int LIMIT = 999; const int TEN = 10; int max_palin = 0; for ( int num1 = 100; num1 <= LIMIT; num1++) for ( int num2 = num1; num2 <= LIMIT; num2++) { int est_num = num1 * num2; int temp = est_num; int rev_num = 0; // 뒤집는 과정 while (temp > 0) { rev_num *= TEN; rev_num += temp % TEN; temp /= TEN; } // 이 수는 대칭수인가? if (rev_num == est_num) { // 그 중에서도 제일 큰 값이 였는가? if (max_palin < rev_num) max_palin = rev_num; cout << num1 << '\t' << num2 << '\t' << rev_num << "\t\t" << max_palin << endl; } } } |
요약.
대칭수라는게 뭔지 알았다.
의미가 같은 과정은 막는게 좋겠지?
'개발 > 문제풀이' 카테고리의 다른 글
Code. 프로젝트 오일러. KR 6번. C++ (0) | 2016.09.25 |
---|---|
Code. 프로젝트 오일러. KR 5번. C++ (0) | 2016.09.25 |
Code. 프로젝트 오일러. KR 3번. C++ (0) | 2016.09.24 |
Code. 프로젝트 오일러. KR 2번. C++ (0) | 2016.09.19 |
Code. 프로젝트 오일러. KR 1번. C++ (0) | 2016.09.18 |