题目:若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。
又如:对于10进制数87:
STEP1:87+78 = 165 STEP2:165+561 = 726
STEP3:726+627 = 1353 STEP4:1353+3531 = 4884
在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
写一个程序,给定一个N(2<=N<=16)进制数M,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
解答:import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
F(sc.nextInt(),sc.nextInt());//输入进制数和十进制数
}
sc.close();
}
public static void F(int t,int k){
int temp=0;
String st=String.valueOf(k);//将十进制转换为字符型
while(temp<=30){
temp++;
String reverse=new StringBuffer(st).reverse().toString();//对字符型取反
st=Integer.toString(Integer.valueOf(reverse,t)+Integer.valueOf(st,t),t);//转换为进制数相加
if(F(st)){
break;
}
}
if(temp>30){
System.out.println("Impossible!");
}else{
System.out.println("STEP="+temp);
}
}
public static boolean F(String st){ //判断是否回文数
int len=st.length();
for(int i=0;i<len/2;i++){
if(st.charAt(i)!=st.charAt(len-1-i)){
return false;
}
}
return true;
}
}