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