用java程序设计,根据标准输入获得一个自然数,打印所有大于10且小于该自然数的超完全数字不变数的倒数排列
时间: 2024-05-29 20:12:30 浏览: 12
超完全数是指一个数的所有因子之和大于它本身,例如12的因子为1、2、3、4、6、12,它们的和为28,大于12本身,因此12是超完全数。不变数是指某个数的各个数码经过平方后,再把平方后的数码相加,得到的新数等于原数,例如1、81、3025都是不变数。
以下是实现该功能的java代码:
import java.util.Scanner;
public class Main {
public static boolean isPerfect(int num) {
int sum = 1;
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
sum += i;
if (i != num / i) {
sum += num / i;
}
}
}
return sum > num;
}
public static boolean isInvariant(int num) {
int sum = 0;
while (num > 0) {
int digit = num % 10;
sum += digit * digit;
num /= 10;
}
return sum == num;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = 11; i < n; i++) {
if (isPerfect(i) && isInvariant(i)) {
StringBuilder sb = new StringBuilder(String.valueOf(i));
System.out.print(sb.reverse() + " ");
}
}
}
}
程序的主要思路是先定义两个方法isPerfect和isInvariant,分别用于判断一个数是否为超完全数和不变数。然后在主方法中读入一个自然数n,循环判断所有大于10且小于n的数是否同时为超完全数和不变数,如果是则将其倒数排列并打印出来。