C++中K位的第N个回文
在本教程中,我们将编写一个程序来查找k个数字的第n个回文。
为了找到k位的第n个回文数,我们可以从前k位数字迭代,直到找到第n个回文数。这种方法效率不高。你可以自己试试。
现在,让我们看看找到k个数字的第n个回文的有效方法。
数字有两半。上半场等于下半场的反面。
有k位的第n个数字的前半部分是
如果k是奇数,则(n-1)+10k/2else(n-1)+10k/2-1
具有k位数字的第n个数字的后半部分将与前半部分数字相反。如果k是奇数,则截断数字前半部分的最后一位数字。
示例
让我们看看代码。
#include输出结果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