C++中K位的第N个回文

在本教程中,我们将编写一个程序来查找 k 个数字的第 n 个回文。

为了找到 k 位的第 n 个回文数,我们可以从前 k 位数字迭代,直到找到第 n 个回文数。这种方法效率不高。你可以自己试试。

现在,让我们看看找到 k 个数字的第 n 个回文的有效方法。

数字有两半。上半场等于下半场的反面。

有 k 位的第 n 个数字的前半部分是

如果 k 是奇数,则 (n - 1) + 10 k/2 else(n-1)+10 k/2-1

具有 k 位数字的第 n 个数字的后半部分将与前半部分数字相反。如果 k 是奇数,则截断数字前半部分的最后一位数字。

示例

让我们看看代码。

#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;
}
输出结果

如果你运行上面的代码,那么你会得到下面的结果。

10066001