本文主要是介绍题目 2113: T1309-回文数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 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<=10或N=16)进制数 M.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible” 。
代码:
package lanqiao;import java.math.BigInteger;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String number = sc.next();for (int i = 1; i <= 30; i++) {String str = new StringBuilder(number).reverse().toString();//反转字符串BigInteger integer = new BigInteger(number,n).add(new BigInteger(str,n));//进制相加number = integer.toString(n);if (chek(number)) {System.out.println(i);return;}}System.out.println("Impossible");}private static Boolean chek(String arg) {//判断回文char[] chars = arg.toCharArray();int left = 0;int right = chars.length-1;while(right-left>1) {if (chars[left++] != chars[right--]) {return false;}}return true;}
}
这篇关于题目 2113: T1309-回文数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!