📜  生成所有小于n的回文数

📅  最后修改于: 2021-04-23 16:23:09             🧑  作者: Mango

查找所有小于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 

请注意,上面的程序不会按排序顺序输出输出。要按排序顺序打印,我们可以将回文图存储在矢量中并进行存储。