7-9 1.2.5 双重回文数
如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321 就是一个回文数,而 77778 就不是.
当然,回文数的首和尾都应是非零的,因此 0220 就不是回文数. 事实上,有一些数(如
21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是 回文数.编一个程序,读入两个十进制数 N (1 <= N <= 15) S (0 < S < 10000)
然后找出前 N 个满足大于 S 且在两种以上进制(二进制至十进制)上是回文数的十进制数,输出到 文件上.
本问题的解决方案不需要使用大于 4 字节的整型变量. 输入格式:
只有一行,用空格隔开的两个数 N 和 S. 输出格式:
N 行, 每行一个满足上述要求的数,并按从小到大的顺序输出. 输入样例:
在这里给出一组输入。例如:
3 25
输出样例:
在这里给出相应的输出。例如:
26 27 28
这题和上一题有点类似,可以复用上一题的部分代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n,s,count=0;
Scanner scanner = new Scanner(System.in);
n=scanner.nextInt();
s=scanner.nextInt();
int []num=new int[n];
for (int i = s+1;count<n;i++){
int temp=0;
for(int j = 2 ;j<=10;j++){
if(isPalin(convert(i,j))){
temp++;
}
if(temp>=2){
num[count]=i;
count++;
break;
}
}
}
for(int i = 0; i<num.length;i++){
System.out.println(num[i]);
}
}
public static boolean isPalin(StringBuffer s){
for (int i=0;i<s.length()/2;i++){
if(s.charAt(i)!=s.charAt(s.length()-i-1)){
return false;
}
}
return true;
}
public static StringBuffer convert(int num,int B) {
StringBuffer rtnval = new StringBuffer();
int digit;
while (num > 0) {
digit = num % B;
if (digit >= 10) {
rtnval.append((char) ('A' + digit - 10));
} else {
rtnval.append(digit);
}
num /= B;
}
return rtnval.reverse();
}
}