📜  Lychrel编号实现

📅  最后修改于: 2021-04-27 22:22:54             🧑  作者: Mango

Lychrel数是一个自然数,它不能通过反复反转其数字并添加结果数的迭代过程来形成回文。在与该过程相关的最著名的数字之后,该过程有时称为196算法。
在应用196算法时不知道会产生回文的前几个数字(即,反向加法序列)有时被称为Lychrel数。
例子:

Input : 56
Output : 56 is lychrel  : false
Explanation : 56 becomes palindromic after one iteration : 
56 + 65 = 121

Input : 196
Output : 196 is lychrel  : true
Explanation : 196 becomes palindromic after 19 iterations :
196 + 691 = 887
887 + 788 = 1675
1675 + 5761 = 7436
7436 + 6347 = 13783
13783 + 38731 = 52514
....
16403234045 + 54043230461
70446464506 + 60546464407

任务是查找给定数字是否为Lycheral,且迭代次数具有给定限制。

1. Iterate given number of times
    1. Add number to it's reverse
    2. If 
         the newly formed number is palindrome
       then
          return false  // Number is not lychrel.
2. return true         // Number is lychrel
C++
// C++ Program to check whether the given number
// is Lychrel Number or not with given limit
// on number of iterations.
#include
using namespace std;
  
long reverse(long);
bool isPalindrome(long);
  
// Max Iterations
static int MAX_ITERATIONS = 20;
  
// Function to check whether number is 
// Lychrel Number
string isLychrel(long number)
{
    for (int i = 0; i < MAX_ITERATIONS; i++)
    {
        number = number + reverse(number);
          
        if (isPalindrome(number))
            return "false";
    }
      
    return "true";
}
  
// Function to check whether the number is
// Palindrome
bool isPalindrome(long number)
{
    return number == reverse(number);
}
  
// Function to reverse the number
long reverse(long number)
{
    long reverse = 0;
    while (number > 0)
    {
        long remainder = number % 10;
        reverse = (reverse * 10) + remainder;
        number = number / 10;
    }
      
    return reverse;
}
  
// Driver program
int main()
{
    long number = 295;
    cout<


Java
// Java Program to check whether the given number
// is Lychrel Number or not with given limit
// on number of iterations.
import java.io.*;
  
public class LychrelNumberTest
{
    // Max Iterations
    private static int MAX_ITERATIONS = 20;
  
    // Function to check whether number is Lychrel Number
    private static boolean isLychrel(long number)
    {
        for (int i = 0; i < MAX_ITERATIONS; i++)
        {
            number = number + reverse(number);
            if (isPalindrome(number))
                return false;
  
        }
        return true;
    }
  
    // Function to check whether the number is Palindrome
    private static boolean isPalindrome(final long number)
    {
        return number == reverse(number);
    }
  
    // Function to reverse the number
    private static long reverse(long number)
    {
        long reverse = 0;
  
        while (number > 0)
        {
            long remainder = number % 10;
            reverse = (reverse * 10) + remainder;
            number = number / 10;
        }
        return reverse;
    }
  
    // driver program
    public static void main(String[] args)
    {
        long number = 295;
        System.out.println(number + " is lychrel? "
                           + isLychrel(number));
    }
}


Python3
# Python3 Program to check whether the given number 
# is Lychrel Number or not with given limit 
# on number of iterations. 
  
# Max Iterations 
MAX_ITERATIONS = 20; 
  
# Function to check whether number is 
# Lychrel Number 
def isLychrel(number):
      
    for i in range(MAX_ITERATIONS): 
        number = number + reverse(number); 
          
        if (isPalindrome(number)): 
            return "false"; 
      
    return "true"; 
  
# Function to check whether the number 
# is Palindrome 
def isPalindrome(number): 
   
    return number == reverse(number); 
  
# Function to reverse the number 
def reverse(number): 
   
    reverse = 0; 
    while (number > 0): 
       
        remainder = number % 10; 
        reverse = (reverse * 10) + remainder; 
        number = int(number / 10); 
      
    return reverse; 
  
# Driver Code
number = 295; 
print(number," is lychrel? ",isLychrel(number)); 
  
# This code is contributed by mits


C#
// C# Program to check whether the given number
// is Lychrel Number or not with given limit
// on number of iterations.
using System;
  
class GFG
{
    // Max Iterations
    private static int MAX_ITERATIONS = 20;
  
    // Function to check whether number is Lychrel Number
    private static bool isLychrel(long number)
    {
        for (int i = 0; i < MAX_ITERATIONS; i++)
        {
            number = number + reverse(number);
            if (isPalindrome(number))
                return false;
  
        }
        return true;
    }
  
    // Function to check whether the number is Palindrome
    private static bool isPalindrome( long number)
    {
        return number == reverse(number);
    }
  
    // Function to reverse the number
    private static long reverse(long number)
    {
        long reverse = 0;
  
        while (number > 0)
        {
            long remainder = number % 10;
            reverse = (reverse * 10) + remainder;
            number = number / 10;
        }
        return reverse;
    }
  
    // Driver program
    public static void Main()
    {
        long number = 295;
        Console.Write(number + " is lychrel? "
                        + isLychrel(number));
    }
}
  
// This code is contributed by vt_m.


PHP
 0) 
    { 
        $remainder = $number % 10; 
        $reverse = ($reverse * 10) + $remainder; 
        $number = (int)($number / 10); 
    } 
      
    return $reverse; 
} 
  
// Driver Code
$number = 295; 
echo $number . " is lychrel? " .
             isLychrel($number); 
  
// This code is contributed by mits 
?>


输出:
295 is lychrel ? true