题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
所谓回文数就是左右对称的数字,比如:
585,5885,123321…
当然,单个的数字也可以算作是对称的。
小明发现了一种生成回文数的方法: 比如,取数字 19,把它与自己的翻转数相加: 19 + 91 = 110,如果不是回文数,就再进行这个过程: 110 + 011 = 121 这次是回文数了。
200 以内的数字中,绝大多数都可以在 30 步以内变成回文数,只有一个数字很特殊,就算迭代了 1000 次,它还是顽固地拒绝回文!
请你输出该顽固数字。
代码:
package com.it.lanqiao;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
/**
* 生成回文数
*/
public class Example06 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 1; i <= 200; i++) {
String pd = createPD(i, new BigInteger(String.valueOf(i)), 0);
list.add(pd);
}
list.sort((o1, o2) -> Integer.parseInt(o2.split(",")[1]) - Integer.parseInt(o1.split(",")[1]));
list.stream().filter(item -> Integer.parseInt(item.split(",")[1]) > 1000).forEach(item -> System.out.println(item.split(",")[0]));
}
public static String createPD(int source, BigInteger num, int count) {
String sReverse = new StringBuffer(String.valueOf(num)).reverse().toString();
if (String.valueOf(num).equals(sReverse)) {
return source + "," + count;
}
BigInteger numReverse = new BigInteger(sReverse);
BigInteger plus = numReverse.add(num);
count++;
if (String.valueOf(plus).equals(new StringBuffer(String.valueOf(plus)).reverse().toString())) {
return source + "," + count;
} else if (count > 1000) {
return source + "," + count;
}
return createPD(source, plus, count);
}
}
输出结果:196