题目描述
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
- 此题将给定的进制数,通过BigInteger这个构造器,先转化为10进制,然后将反转后的数和原数进行高精度的相加add方法;然后通过toString方法,通过指定参数来转为原来的n进制,用一个check方法去判断,和数是否为回文数;高精度计算的有关类:BigInteger,参考地址,StringBuffer可以通过reverse方法对字符串直接进行反转,但需要注意他调用方法后,对其本身就直接反转了;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
//判断输入的字符串是否为回文
static boolean check(String s) {
int len = s.length();
for (int i = 0; i < len; i++) {
if (s.charAt(i) != s.charAt(len - i - 1))
return false;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String m = sc.next();
int i;
StringBuffer sb = new StringBuffer(m);//原数
for (i = 1; i <= 30; i++) {
//先转化为10进制进行相加
BigInteger a = new BigInteger(sb.toString(), n);//将n进制的sb转化为字符串,转化为10进制的BigInteger
sb.reverse();//将字符串倒置
BigInteger b = new BigInteger(sb.toString(), n);//将n进制的s转化为字符串,转化为10进制的BigInteger
BigInteger ans = a.add(b);//对原文和倒置的数相加
//将和数恢复到原来的n进制检查是否为回文
String str = ans.toString(n);
if (check(str)) {//这个字符串为回文
System.out.println("STEP=" + i);
return;
}
sb = new StringBuffer(str);//将这个和数作为新的原数
}
System.out.println("Impossible!");
}
}



