题目描述
小明最近对回文数比较感兴趣,所谓回文数,就是把一个数的数位反着写和原来的数相等,如若1234321就是一个回文数。小明发现如果对任选的一个正数n,不断加上把它反过来得到的数,经过若干步运算,有可能得到一个“回文数”,请你帮帮小明能否在指定步数m以内对指定正数生成一个回文数。如69经过4步可以变成一个回文数:
69 + 96 = 165
165 +561 = 726
726 + 627 = 1353
1353 + 3531 = 4884
输入
每一行第1个数是n(0<n<263),第2个数是m(0<m<105).
输出
如果n能在m步以内生成回文,则输出yes,否则输出,no
样例输入
67 1
69 5
69 3
11 1
99 1
样例输出
no
yes
no
yes
no
如何完成
我的解答
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
long temp=sc.nextLong();
int times=sc.nextInt();
String str=temp+"";
String s=js(str);
int count=0;
for(int i=0;i<times;i++) {
str=js(str);
if(pd(str)) {
System.out.println("yes");
break;
}else {
count++;
continue;
}
}
if(count==times) {
System.out.println("no");
}
}
}
public static boolean pd(String s){ //判断一个数是否为回文数
String string=s;
for(int i=0;i<string.length()/2;i++){
if(string.charAt(i)!=string.charAt(string.length()-i-1)){
return false;
}
}
return true;
}
public static String fz(String s) { //翻转一个字符串数字
StringBuilder sb=new StringBuilder(s);
return sb.reverse().toString();
}
public static String js(String s) { //对字符串数字进行回文运算
StringBuilder sb=new StringBuilder(s);
String s1= sb.reverse().toString();
return (new BigInteger(s1).add(new BigInteger(s))).toString();
}
}
//本题的算法设计占用了较大内存,若有更加好的建议,欢迎优化!