用java写一个程序,给定一个N(2<=N<=16)进制数M,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
时间: 2024-02-21 08:58:03 浏览: 62
编写一个判断回文数java应用程序。
4星 · 用户满意度95%
好的,我可以帮你写这个程序。以下是Java代码实现:
```java
import java.util.Scanner;
public class Palindrome {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt(); // 进制数
String M = scanner.next(); // 原始数
int step = 0; // 步数
boolean isPalindrome = false; // 是否为回文数
while (step <= 30 && !isPalindrome) {
StringBuilder sb = new StringBuilder(M);
String reverseM = sb.reverse().toString(); // 将M翻转得到的回文数
if (M.equals(reverseM)) { // 如果M本身就是回文数
isPalindrome = true;
break;
}
// 将M和reverseM转换为10进制数,相加后再转换为N进制数
int sum = Integer.parseInt(M, N) + Integer.parseInt(reverseM, N);
M = Integer.toString(sum, N);
step++;
}
if (isPalindrome) {
System.out.println(step);
} else {
System.out.println("Impossible!");
}
}
}
```
程序中使用了一个 `StringBuilder` 对象,将原始数 `M` 翻转得到的回文数 `reverseM`。如果 `M` 本身就是回文数,则直接输出步数 `0`。否则,将 `M` 和 `reverseM` 转换为 `10` 进制数,相加后再转换为 `N` 进制数。程序最多执行 `30` 步,若此时仍然无法得到回文数,则输出 "Impossible!"。
阅读全文