>  기사  >  백엔드 개발  >  C++의 K자리 숫자 중 N번째 회문번호

C++의 K자리 숫자 중 N번째 회문번호

王林
王林앞으로
2023-09-07 22:25:02738검색

C++의 K자리 숫자 중 N번째 회문번호

k자리의 n번째 회문 번호를 찾으려면 n번째 회문 번호를 찾을 때까지 첫 번째 k자리 숫자부터 반복하면 됩니다. 이 방법은 효율적이지 않습니다. 직접 시도해 볼 수 있습니다.

이제 k자리의 n번째 회문수를 찾는 효율적인 방법을 살펴보겠습니다.

한 숫자에는 두 개의 반쪽이 있습니다. 전반전은 후반전의 반전과 동일합니다.

n번째 k자리 숫자의 앞부분은

k가 홀수이면 (n-1)+10k/2이고, 그렇지 않으면 (n-1)+10k/입니다. 2- 1

n번째 k자리 숫자의 후반부는 숫자의 전반부의 반전이 됩니다. k가 홀수이면 숫자의 전반부에서 마지막 숫자를 제거합니다.

Algorithm

  • 숫자 n과 k를 초기화합니다.
  • k값을 이용하여 k자리 회문의 전반부의 길이를 구합니다.
  • 회문 수의 전반부는 pow(10, 길이) + n - 1입니다.
  • k가 홀수인 경우 회문 번호의 전반부에서 마지막 숫자를 제거하세요.
  • 전반을 뒤집어서 후반을 인쇄하세요.

Implementation

다음은 위 알고리즘을 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;
}

Output

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

rreee

위 내용은 C++의 K자리 숫자 중 N번째 회문번호의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제