输出求非利克瑞尔数的回文数的迭代过程java
时间: 2024-05-02 18:20:13 浏览: 98
非利克瑞尔数(Narcissistic Number),又称水仙花数或自恋数,指的是一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身。例如,153 就是一个水仙花数,因为 $1^3+5^3+3^3=153$。
现在我们要求出所有小于等于 $N$ 的非利克瑞尔数的回文数,并输出每一个回文数的迭代过程。其中回文数指的是正着读和倒着读都相同的数。
Java 代码如下:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for (int i = 1; i <= N; i++) {
if (isNarcissistic(i)) {
int palindrome = getPalindrome(i);
if (palindrome > 0 && palindrome <= N) {
System.out.print(i);
int n = i;
while (n != 0) {
System.out.print(" -> " + (n % 10) + "^3");
n /= 10;
}
System.out.print(" = " + i + " -> " + palindrome);
System.out.println();
}
}
}
}
// 判断一个数是否为非利克瑞尔数
private static boolean isNarcissistic(int n) {
int sum = 0, m = n;
int digits = getDigits(n);
while (m != 0) {
int digit = m % 10;
sum += Math.pow(digit, digits);
m /= 10;
}
return sum == n;
}
// 获取一个数的位数
private static int getDigits(int n) {
int digits = 0;
while (n != 0) {
digits++;
n /= 10;
}
return digits;
}
// 获取一个非利克瑞尔数的回文数
private static int getPalindrome(int n) {
int palindrome = 0, m = n;
while (m != 0) {
palindrome = palindrome * 10 + m % 10;
m /= 10;
}
return palindrome;
}
}
```
代码思路:
1. 读入参数 $N$。
2. 对于 $i$ 从 $1$ 到 $N$,检查 $i$ 是否为非利克瑞尔数:
- 如果 $i$ 是非利克瑞尔数,执行以下步骤:
1. 获取 $i$ 的回文数 $palindrome$。
2. 如果 $palindrome$ 在 $1$ 到 $N$ 的范围内,输出 $i$ 的迭代过程和 $palindrome$。
3. 判断一个数是否为非利克瑞尔数的方法为:将该数的每一位数的 $n$ 次幂相加,如果等于该数本身,则该数为非利克瑞尔数。
4. 获取一个数的位数的方法为:将该数除以 $10$ 直到等于 $0$,累计除的次数即为位数。
5. 获取一个非利克瑞尔数的回文数的方法为:将该数从个位开始依次取出每一位数,组成一个新的数即为回文数。
阅读全文