回文数
来源:互联网 发布:手机淘宝ios历史版本 编辑:程序博客网 时间:2024/06/01 09:19
问题描述
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个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(其中16进制数字为0-9与A-F),求最少经过几步可以得到回文数。
如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
输入格式
两行,N与M
输出格式
如果能在30步以内得到回文数,输出“STEP=xx”(不含引号),其中xx是步数;否则输出一行”Impossible!”(不含引号)
样例输入
9
87
样例输出
STEP=6
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个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(其中16进制数字为0-9与A-F),求最少经过几步可以得到回文数。
如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
输入格式
两行,N与M
输出格式
如果能在30步以内得到回文数,输出“STEP=xx”(不含引号),其中xx是步数;否则输出一行”Impossible!”(不含引号)
样例输入
9
87
样例输出
STEP=6
import java.util.*;public class Main9 {public static String N, str;public static int sum = 0;public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);N = sc.next();str = sc.next();search(N, str);}// 查询回文数public static void search(String des, String array) {char[] n = N.toCharArray();char[] arrays = array.toCharArray();// 连续加三十次,查看是否存在回文数for (int i = 0; i <= 30; i++) {if (is_huiwen(arrays)) {System.out.println("STEP=" + i);return;} else {arrays = add(arrays, n);}}// 不存在回文数System.out.println("Impossible!");}// 判断该字符数组是否为回文public static boolean is_huiwen(char[] arr) {for (int i = arr.length - 1; i >= arr.length / 2; i--) {// System.out.println(arr[i] + " " + arr[arr.length - i - 1]);if (arr[i] != arr[arr.length - i - 1]) {return false;}}return true;}// 相加public static char[] add(char[] st, char[] jin) {int tmp = 0;int j;if (jin.length > 1) {j = Integer.parseInt("" + jin[0] + jin[1]);} elsej = jin[0] - '0';// 保存结果char[] tmps = new char[st.length + 1];int sum;for (int i = 0; i < st.length; i++) {if (j == 16) {sum = (int) (st[i] > '9' ? st[i] - 55 : st[i] - '0')+ (int) (st[st.length - i - 1] > '9' ? st[st.length - i- 1] - 55 : st[st.length - i - 1] - '0') + tmp;} elsesum = (st[i] - '0') + (st[st.length - i - 1] - '0') + tmp;tmp = sum / j;int yus = sum % j;tmps[i] = (char) (sum % j >= 10 ? yus + 55 : yus + '0');}// 假如有进位则返回进位的数组if (tmp != 0) {tmps[tmps.length - 1] = (char) (tmp + '0');return tmps;}// 假如最高位没有进1,则保存原始的长度,避免有前导零char[] retemp = new char[tmps.length - 1];for (int i = 0; i < retemp.length; i++) {retemp[i] = tmps[i];}return retemp;}}
0 0
- 回文回文数 HUST
- 回文数&&回文串
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- 回文数
- CMD命令字符
- 如何使用Log4j?
- js获取DropDownList的显示值
- 数据结构与算法C语言描述 第三章练习
- JAVA语言的反射和内省
- 回文数
- 不在懒惰
- golang 使用mgo 连接MongoDB
- C# 中的委托和事件
- shell判断文件是否为空
- Android 4.4 Initializing a Build Environment on Ubuntu 12.04
- 2011 蓝桥杯【初赛试题】反转串
- LeetCode 024 Swap Nodes in Pairs
- Pygtk在win32下安装