生成回文数
所谓回文数就是左右对称的数字,比如:
585,5885,123321...
当然,单个的数字也可以算作是对称的。
小明发现了一种生成回文数的方法:
比如,取数字19,把它与自己的翻转数相加:
19 + 91 = 110,如果不是回文数,就再进行这个过程:
110 + 011 = 121 这次是回文数了。
200以内的数字中,绝大多数都可以在30步以内变成回文数,只有一个数字很特殊,就算迭代了1000次,它还是顽固地拒绝回文!
请你提交该顽固数字,不要填写任何多余的内容。
思路:
思路很简单,按题意来,遍历1~200的数字,递归进行翻转验证是否为回文数,记录递归次数,若小于30次成回文则退出递归,直到递归次数大于30次,则打印;
package Lqb;
import java.math.BigInteger;
public class Text45 {
static int p;
public static void main(String[] args) {
for(p=0;p<200;p++){
//System.out.println("初始数: "+p);
dg(BigInteger.valueOf(p),0);
}
}
public static void dg(BigInteger i,int j){
String x=""; //头
String y=""; //尾
String m=String.valueOf(i); //保存和(字符串)
for(int n=m.length()/2-1;n>=0;n--){ //判断是否是回文数
x+=m.charAt(n)+"";
}
int len=m.length()/2+(m.length()%2==0?0:1); //
y=m.substring(len);
if(x.equals(y)){ //判断为回文数
//System.out.println(" 最终数: "+i+" 次数:"+j);
return;
}
if(j>30){ //判断重复过程>30
System.out.println("初始数: "+p+" 最终数: "+i+" 次数:"+j);
return;
}
BigInteger k=i; //保存原数字
String str=""; //保存翻转数字
for(int f=String.valueOf(i).length()-1;f>=0;f--){ //翻转数字
str+=String.valueOf(i).charAt(f);
}
BigInteger sum= new BigInteger(str).add(k); //保存和(原数字+翻转数字)
dg(sum,++j);
}
}