k자리의 n번째 회문 번호를 찾으려면 n번째 회문 번호를 찾을 때까지 첫 번째 k자리 숫자부터 반복하면 됩니다. 이 방법은 효율적이지 않습니다. 직접 시도해 볼 수 있습니다.
이제 k자리의 n번째 회문수를 찾는 효율적인 방법을 살펴보겠습니다.
한 숫자에는 두 개의 반쪽이 있습니다. 전반전은 후반전의 반전과 동일합니다.
n번째 k자리 숫자의 앞부분은
k가 홀수이면 (n-1)+10k/2이고, 그렇지 않으면 (n-1)+10k/입니다. 2- 1
n번째 k자리 숫자의 후반부는 숫자의 전반부의 반전이 됩니다. k가 홀수이면 숫자의 전반부에서 마지막 숫자를 제거합니다.
다음은 위 알고리즘을 C++로 구현한 것입니다
#include<bits/stdc++.h> using namespace std; void findNthPalindrome(int n, int k) { int temp = (k & 1) ? (k / 2) : (k / 2 - 1); int palindrome = (int)pow(10, temp); palindrome += n - 1; cout << palindrome; if (k & 1) { palindrome /= 10; } while (palindrome) { cout << palindrome % 10; palindrome /= 10; } cout << endl; } int main(){ int n = 7, k = 8; findNthPalindrome(n ,k); return 0; }
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
rreee위 내용은 C++의 K자리 숫자 중 N번째 회문번호의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!