公司内部出的面试题,该如何解决

公司内部出的面试题
题目如下:在一个>=0且<=1000(1000为故意缩小范围的,不缩小范围应是>=0的自然数)的自然数中,有一个非常特殊的数,把它的已知的数加上已知数的倒数,再进行反加,而得到的这个数永远不可能是一个回文数。所谓回文数:就是一个数即使是顺读还是倒读,都一样。如:121、5、7、46764、66......请问这个数是多少?
如:已知一个正自然数:714+471=1131+1311=2442。这个已经成回文数了。
------解决方案--------------------

public static void main(String[] args) {
     int sum;
     for(int i=0; i<1000; i ++){
     sum = 0;
     sum = (i + reverse(i));
     sum += reverse(sum);
     if(sum == reverse(sum)){
     continue;
     } else
     System.out.println(i);
     }
    }
    public static int reverse(int value){
String s = "" + value;
StringBuffer sb = new StringBuffer(s);
String str = sb.reverse().toString();
return Integer.parseInt(str);
}
确定没范围?感觉无限多啊
------解决方案--------------------
好难!如果可以一直加下去的话... 
现在只能确定的一点是:如果真的存在这么一个数a0满足题目条件的话,则
a1=a0+a0的颠倒数
a2=a1+a1的颠倒数
...
这一系列的ai都会是满足题目要求的。
所以在正整数范围内,要么一个解都没有,要么有无数个解。
期待大牛解答。
------解决方案--------------------
先问下如果原数字结尾是0,“倒数”怎么处理。
------解决方案--------------------
国内外研究现状
  人们迄今未能找到五次方,以及更高次幂的回文数。于是数学家们猜想:不存在nk(k≥5;n、k均是自然数)形式的回文数。
  在电子计算器的实践中,还发现了一桩趣事:任何一个自然数与它的倒序数相加,所得的和再与和的倒序数相加,……如此反复进行下去,经过有限次步骤后,最后必定能得到一个回文数。
  这也仅仅是个猜想,因为有些数并不“驯服”。比如说196这个数,按照上述变换规则重复了数十万次,仍未得到回文数。但是人们既不能肯定运算下去永远得不到回文数,也不知道需要再运算多少步才能最终得到回文数。
------解决方案--------------------
很好奇这道题面的是什么职位?

只能算是个数学趣题吧。可能实现上需要大数加法。
------解决方案--------------------
貌似猜想还没被证明来着.
------解决方案--------------------
大牛公司内部出的面试题,该如何解决
------解决方案--------------------
公司内部出的面试题,该如何解决

//题目如下:
// 在一个>=0且<=1000(1000为故意缩小范围的,不缩小范围应是>=0的自然数)的自然数中,
// 有一个非常特殊的数,把它的已知的数加上已知数的倒数,再进行反加,而得到的这个数永远不可能是一个回文数。
// 所谓回文数:就是一个数即使是顺读还是倒读,都一样。如:121、5、7、46764、66......请问这个数是多少?
// 如:已知一个正自然数:714+471=1131+1311=2442。这个已经成回文数了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>

#define MAX_TEST 100000
#define INT_RADIX 10
#define BUF_SIZE 50

bool isHuiWen(int i)
{
char buf[BUF_SIZE];
itoa(i, buf, INT_RADIX);

int len = strlen(buf);
int half_len = len/2;
for(int j=0;j<half_len;++j)
{
if(buf[j]!=buf[len-1-j])
return false;
}
return true;
}

void test(int i)
{
int temp = i;
char buf[BUF_SIZE];
for(int j=0;j<MAX_TEST;++j)
{
i+=(atoi(strrev(itoa(i, buf, INT_RADIX))));
if(isHuiWen(i))
{
printf("%d 不是特殊数字\n",temp);
Sleep(1000);
return;
}
}
printf("%d 测试%d次尚符合要求\n",temp,MAX_TEST);
Sleep(1000);
}

int main()
{
//for(int i=0;i<1000;++i)
test(89);
return 0;
}

为何我测试下来 89   98等等数字都可以,看来不是 196 唯一啊。
------解决方案--------------------
引用:
公司内部出的面试题,该如何解决

//题目如下:
// 在一个>=0且<=1000(1000为故意缩小范围的,不缩小范围应是>=0的自然数)的自然数中,
// 有一个非常特殊的数,把它的已知的数加上已知数的倒数,再进行反加,而得到的这个数永远不可能是一个回文数。
// 所谓回文数:就是一个数即使是顺读还是倒读,都一样。如:121、5、7、46764、66......请问这个数是多少?
// 如:已知一个正自然数:714+471=1131+1311=2442。这个已经成回文数了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>

#define MAX_TEST 100000
#define INT_RADIX 10
#define BUF_SIZE 50

bool isHuiWen(int i)
{
char buf[BUF_SIZE];
itoa(i, buf, INT_RADIX);

int len = strlen(buf);
int half_len = len/2;
for(int j=0;j<half_len;++j)
{
if(buf[j]!=buf[len-1-j])
return false;
}
return true;
}

void test(int i)
{
int temp = i;
char buf[BUF_SIZE];
for(int j=0;j<MAX_TEST;++j)
{
i+=(atoi(strrev(itoa(i, buf, INT_RADIX))));
if(isHuiWen(i))
{
printf("%d 不是特殊数字\n",temp);
Sleep(1000);
return;
}
}
printf("%d 测试%d次尚符合要求\n",temp,MAX_TEST);
Sleep(1000);
}

int main()
{
//for(int i=0;i<1000;++i)
test(89);
return 0;
}

为何我测试下来 89   98等等数字都可以,看来不是 196 唯一啊。

196以下的数都已经被证明有限步会达到回文。你的例子肯定不对。
你的代码问题是i的范围是int。太小。

但是大于196的的确也有很多数未找到达到回文的步数。这个没找到回文是指已经算了几百万了还没找到。
------解决方案--------------------
196 问题

    一个数正读反读都一样,我们就把它叫做“回文数”。随便选一个数,不断加上把它反过来写之后得到的数,直到得出一个回文数为止。例如,所选的数是 67,两步就可以得到一个回文数 484: