/*
双基回文数:
如果一个正整数n至少在两个不同的进位制b1和b2下都是回文数(2<=b1,b2<=10),
则称n是双基回文数(注意,回文数不能包含前导零),输入正整数S<10^6,输出比S大的
最小双基回文数。
样例输入:1600000
样例输出:1632995
*/
//暴力
import java.util.*;
public class Main8 {
public static long n;
public static void main(String[] args) {
long start = System.currentTimeMillis();
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
n = sc.nextLong();
while (!doubleNum(n++))
;
System.out.println(n - 1);
long end = System.currentTimeMillis();
System.out.println(end - start + "ms");
}
// 判断出入的数是否是双基回文数
public static boolean doubleNum(long m) {
int flag = 0;
for (int i = 2; i <= 10; i++) {
if (forBack(refor(m, i))) {
flag++;
}
if (flag >= 2) {
return true;
}
}
return false;
}
// 判断该数组是否是回文数
public static boolean forBack(char[] tmp) {
for (int i = 0; i < tmp.length / 2; i++) {
if (tmp[i] != tmp[tmp.length - i - 1])
return false;
}
return true;
}
// 求进制分解后的字符数组
public static char[] refor(long m, int n) {
String st = "";
while (m > n) {
st += m % n;
m = m / n;
}
st += m;
return st.toCharArray();
}
}
双基回文数
最新推荐文章于 2017-12-15 17:53:00 发布