查找所有小于n的数字,这是回文的。数字可以按任何顺序打印。
例子 :
Input : n = 12
Output : 1, 2, 3, 4, 5, 6, 7, 8, 9, 11
Input : n = 104
Output : 1, 2, 3, 4, 5, 6, 7, 8, 9, 11,
22, 33, 44, 55, 66, 77, 88, 99, 101
[Note that below program prints these numbers
in different order]
蛮力:我们检查从1到n的所有数字,其十进制表示形式是否为回文。
高效方法:我们从1开始,创建奇数位和偶数位直至n的回文。对于每个数字(从1开始),如果需要偶数回文数,则在末尾附加它的反面。对于奇数回文,我们将除最后一位以外的所有数字都反向附加。
C/C++
// A C++ program to generate palindromic numbers
// less than n.
#include
using namespace std;
// A utility for creating palindrome
int createPalindrome(int input, int b, bool isOdd)
{
int n = input;
int palin = input;
// checks if number of digits is odd or even
// if odd then neglect the last digit of input in
// finding reverse as in case of odd number of
// digits middle element occur once
if (isOdd)
n /= b;
// Creates palindrome by just appending reverse
// of number to itself
while (n > 0)
{
palin = palin * b + (n % b);
n /= b;
}
return palin;
}
// Function to print decimal palindromic number
void generatePalindromes(int n)
{
int number;
// Run two times for odd and even length palindromes
for (int j = 0; j < 2; j++)
{
// Creates palindrome numbers with first half as i.
// Value of j decided whether we need an odd length
// of even length palindrome.
int i = 1;
while ((number = createPalindrome(i, 10, j % 2)) < n)
{
cout << number << " ";
i++;
}
}
}
// Driver Program to test above function
int main()
{
int n = 104;
generatePalindromes(n);
return 0;
}
Java
// A Java program to generate palindromic
// numbers less than n.
class GFG {
// A utility for creating palindrome
static int createPalindrome(int input, int b, int isOdd) {
int n = input;
int palin = input;
// checks if number of digits is odd or even
// if odd then neglect the last digit of input in
// finding reverse as in case of odd number of
// digits middle element occur once
if (isOdd == 1)
n /= b;
// Creates palindrome by just appending reverse
// of number to itself
while (n > 0) {
palin = palin * b + (n % b);
n /= b;
}
return palin;
}
// Function to print decimal
// palindromic number
static void generatePalindromes(int n) {
int number;
// Run two times for odd and even
// length palindromes
for (int j = 0; j < 2; j++) {
// Creates palindrome numbers with first
// half as i. Value of j decided whether
// we need an odd length of even length
// palindrome.
int i = 1;
while ((number = createPalindrome(i, 10, j % 2)) < n) {
System.out.print(number + " ");
i++;
}
}
}
// Driver code
public static void main(String[] args) {
int n = 104;
generatePalindromes(n);
}
}
// This code is contributed by Anant Agarwal.
Python
# Generate all palindromic numbers less than n
# A Python program to generate palindromic numbers
# less than n.
def createPalindrome(inp, b, isOdd):
n = inp
palin = inp
# checks if number of digits is odd or even
# if odd then neglect the last digit of input in
# finding reverse as in case of odd number of
# digits middle element occur once
if (isOdd):
n = n / b
# Creates palindrome by just appending reverse
# of number to itself
while (n > 0):
palin = palin * b + (n % b)
n = n / b
return palin
# Function to print decimal palindromic number
def generatePalindromes(n):
# Run two times for odd and even length palindromes
for j in range(2):
# Creates palindrome numbers with first half as i.
# Value of j decided whether we need an odd length
# of even length palindrome.
i = 1
while (createPalindrome(i, 10, j % 2) < n):
print createPalindrome(i, 10, j % 2),
i = i + 1
# Driver Program to test above function
n = 104
generatePalindromes(n)
#This code is contributed by Afzal Ansari
C#
// A C# program to generate palindromic
// numbers less than n.
using System;
class GFG {
// A utility for creating palindrome
static int createPalindrome(int input, int b,
int isOdd)
{
int n = input;
int palin = input;
// checks if number of digits is odd
// or even if odd then neglect the
// last digit of input in finding reverse
// as in case of odd number of digits
// middle element occur once
if (isOdd == 1)
n /= b;
// Creates palindrome by just appending
// reverse of number to itself
while (n > 0)
{
palin = palin * b + (n % b);
n /= b;
}
return palin;
}
// Function to print decimal
// palindromic number
static void generatePalindromes(int n)
{
int number;
// Run two times for odd and even
// length palindromes
for (int j = 0; j < 2; j++)
{
// Creates palindrome numbers with first
// half as i. Value of j decided whether
// we need an odd length of even length
// palindrome.
int i = 1;
while ((number = createPalindrome(i, 10,
j % 2)) < n)
{
Console.Write(number + " ");
i++;
}
}
}
// Driver Code
public static void Main()
{
int n = 104;
generatePalindromes(n);
}
}
// This code is contributed by Nitin Mittal.
PHP
0)
{
$palin = $palin * $b + intval($n % $b);
$n = intval($n / $b);
}
return $palin;
}
// Function to print decimal
// palindromic number
function generatePalindromes($n)
{
$number = 0;
// Run two times for odd and
// even length palindromes
for ($j = 0; $j < 2; $j++)
{
// Creates palindrome numbers
// with first half as i. Value
// of j decided whether we need
// an odd length of even length
// palindrome.
$i = 1;
while (($number =
createPalindrome($i, 10,
$j % 2)) < $n)
{
echo $number . " ";
$i++;
}
}
}
// Driver Code
$n = 104;
generatePalindromes($n);
// This code is contributed by Sam007
?>
输出 :
11 22 33 44 55 66 77 88 99 1 2 3 4 5 6 7 8 9 101
请注意,上面的程序不会按排序顺序输出输出。要按排序顺序打印,我们可以将回文图存储在矢量中并进行存储。