# Project Euler：Problem 55 Lychrel numbers

If we take 47, reverse and add, 47 + 74 = 121, which is palindromic.

Not all numbers produce palindromes so quickly. For example,

349 + 943 = 1292,
1292 + 2921 = 4213
4213 + 3124 = 7337

That is, 349 took three iterations to arrive at a palindrome.

Although no one has proved it yet, it is thought that some numbers, like 196, never produce a palindrome. A number that never forms a palindrome through the reverse and add process is called a Lychrel number. Due to the theoretical nature of these numbers, and for the purpose of this problem, we shall assume that a number is Lychrel until proven otherwise. In addition you are given that for every number below ten-thousand, it will either (i) become a palindrome in less than fifty iterations, or, (ii) no one, with all the computing power that exists, has managed so far to map it to a palindrome. In fact, 10677 is the first number to be shown to require over fifty iterations before producing a palindrome: 4668731596684224866951378664 (53 iterations, 28-digits).

Surprisingly, there are palindromic numbers that are themselves Lychrel numbers; the first example is 4994.

How many Lychrel numbers are there below ten-thousand?

NOTE: Wording was modified slightly on 24 April 2007 to emphasise the theoretical nature of Lychrel numbers.

#include <iostream>
#include <string>
using namespace std;

string num2str(int n)
{
string ans = "";
while (n)
{
int a = n % 10;
char b = a + '0';
ans = b + ans;
n /= 10;
}
return ans;
}

string strplus(string a, string b)
{
int len = a.length();

int flag = 0;
string ans = "";
for (int i = len - 1; i >= 0; i--)
{
int tmp = a[i] + b[i] - '0' - '0' + flag;
flag = tmp / 10;
tmp = tmp % 10;
char p = tmp + '0';
ans = p + ans;
}
if (flag == 1)
ans = '1' + ans;
return ans;
}

bool pali(string a)
{
for (int i = 0; i < a.length() / 2; i++)
{
if (a[i] != a[a.length() - 1 - i])
return false;
}
return true;
}

bool isLychrel(int n)
{
string a, b;
a = num2str(n);
b.assign(a.rbegin(), a.rend());
for (int i = 1; i <= 50; i++)
{
a = strplus(a, b);
if (pali(a))
return false;
b.assign(a.rbegin(), a.rend());
}
return true;
}

int main()
{

int count = 0;
for (int i = 1; i <= 10000; i++)
{
if (isLychrel(i))
count++;
}
cout << count << endl;
system("pause");
return 0;
}


• 本文已收录于以下专栏：

## Project-Euler problem 1-50

• u011401504
• 2015年01月31日 00:09
• 2030

## Project Euler：Problem 88 Product-sum numbers

A natural number, N, that can be written as the sum and product of a given set of at least two natur...
• youb11
• 2015年07月23日 22:35
• 906

## project euler 101

Problem 101 Optimum polynomial If we are presented with the first k terms of a sequence it...
• whuawell
• 2015年12月23日 22:19
• 168

## Project Euler ：Problem 54 Poker hands

In the card game poker, a hand consists of five cards and are ranked, from lowest to highest, in the...
• youb11
• 2015年07月07日 14:50
• 719

## Project Euler Problem 51-70

• u011401504
• 2015年02月08日 02:22
• 1686

## Project Euler：Problem 89 Roman numerals

For a number written in Roman numerals to be considered valid there are basic rules which must be fo...
• youb11
• 2015年07月24日 16:44
• 569

## Project Euler18题 从上往下邻接和

• jiang111_111shan
• 2015年07月16日 09:06
• 803

## project euler 解题

project euler 3：Any integer greater than 1 is either a prime number, or can be written as a unique p...
• cctvzxxz1
• 2013年06月23日 20:25
• 3577

## Project Euler 55

• lushl9301
• 2012年12月02日 17:06
• 205

## Porject Euler problem 55

• sdj222555
• 2012年11月07日 08:43
• 426

举报原因： 您举报文章：Project Euler：Problem 55 Lychrel numbers 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)