题目:”若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如:87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
编写一个程序,输入M(12<=M<=100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。
解答
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
while(n-- > 0)
F(sc.nextInt());
}
sc.close();
}
private static void F(int n){
int step = 0;
String rs = String.valueOf(n);//String.valueOf(int n) : 将 int 变量 i 转换成字符串
while(step <= 8){
step++;
String reverse = new StringBuffer(rs).reverse().toString();
rs = String.valueOf(Integer.valueOf(rs) + Integer.valueOf(reverse));//Integer.valueof()返回的是Integer的对象。
if(isHuiWen(rs))
break;
}
if(step > 8)
System.out.println(0);
else
System.out.println(step);
}
//判断是否为回文数
private static boolean isHuiWen(String str){
int len = str.length();
for(int i = 0; i < len/2; i++){
if(str.charAt(i) != str.charAt(len-1-i))
return false;
}
return true;
}
}