题目
一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数。比如121,2332都是回文数,13,4567不是回文数。
任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得到一个新的数,如果新数不是回文数,重复这个变换,直到得到一个回文数为止。例如,57变换后得到132(57+
75),132得到363(132+231),363是一个回文数。
曾经有数学家猜想:对于任意正整数,经过有限次上述变换以后,一定能得出一个回文数。至今这个猜想还没有被证明是对的。现在请你通过程序来验证。
样例输入
349
样例输出
3
349—>1292—>4213—>7337
实现代码:(java)
import java.util.Scanner;
public class Main {
static boolean hw(char[] s2) //判断方法是否回文数
{
boolean flag=false;
for(int i=0, j=s2.length-1;i<s2.length/2&&i<j;i++,j--)
{if(s2[i]!=s2[j])
{
flag=true;//True 表示不是回文数
return flag;
}
}
return flag;
}
static int fz(int n) //求一个数的反数(例如 345的为543)
{int m=0;
while(n!=0)
{
m=m*10+n%10;
n/=10;
}
return m;
}
public static void main(String[] args)
{
Scanner c=new Scanner(System.in);
int n=c.nextInt();
int n1=n;int n2=n;int n3=n;
//
String s ="";
while(n1!=0) //n1存入string的s中,但存入的s为数字n1的反转(即345存入s为string类的“543”),
//下边有解决方法
{
s+=n1%10;
n1/=10;
}
//解决字符串反转问题,顺便转为字符数组中(因为 boolean hw(char[] s2) 需要数组类型形参 )
StringBuilder sb = new StringBuilder(s);//想要反转字符串,借用StringBuilder的reverse()。
String s2=sb.reverse().toString();
char[] c1=new char[sb.length()];
s2.getChars(0, sb.length(),c1 , 0);//将数字"n1"存入s(反),然后将s转为StringBuilder sb,
//sb反转(reverse),转入char数组"c1"(getChars())
//
int [] a=new int[15];int k=0;
boolean flag=hw(c1);
while(flag==true)//判断是否继续需要加上自己的反数(345的反数543)
{
n2+=fz(n2);
//System.out.println("进入");
a[k]=n2;k++;
n1=n2;
/重复上边步骤,将数存入字符数组
s ="";
while(n1!=0)
{
s+=n1%10;
n1/=10;
}
StringBuilder sb2 = new StringBuilder(s);
String s21=sb2.reverse().toString();
char[] c11=new char[sb2.length()];
sb2.getChars(0, sb2.length(),c11 , 0);//存入字符数组 c11
//
flag=hw(c11);
}
System.out.println(k);
System.out.print(n3);
for(int p=1;p<=k;p++)
{
// System.out.print("("+p+")"+k+")");
System.out.print("--->"+a[p-1]);
}
}
}