引入
水仙花数, 四叶玫瑰数, 五角星数, 六合数 ,北斗七星数, 八仙数, 九九重阳数 ,十全十美数这类数是什么呢?
他们每位数的n次方的和等于他们本身,统称为数独身数。具体几次方要看他们有几位数了。
问题
输入:函数传入一个3~10的整数,如3代表计算水仙花数,4代表计算四叶玫瑰数,以此类推…
输出:对应输出水仙花数、四叶玫瑰数…
代码实现
public class SudukuNum {
public static void main(String[] args){
getNum(5);
}
//传入:整数
//输出:对应的数
//如:输入3 ,输出所有水仙花数;输入4,输出所有四叶玫瑰花数
public static void getNum(int num) {
if (num < 3 || num > 10) {
System.out.println("输入范围在3~10");
return;
}
int start = (int)Math.pow(10,num-1);
int end = (int)Math.pow(10,num);
for (int i = start; i < end; ++i) {
int[] arr = getOne(i);
int sum = 0;
for (int j=0;j<10;++j){
sum += Math.pow(arr[j],num);
}
if(sum == i){
System.out.println(i);
}
}
}
//传入一个数,读取到其各个位数到数组中并返回
public static int[] getOne(int num) {
int[] arr = new int[10];
int len = 0;
while (num > 0) {
arr[len] = num%10;
num = num/10;
len++;
}
return arr;
}
}
输出结果
缺点
当传入的数字越大计算越慢,还需要继续优化代码。当传入7时就已经非常慢了,因为这时相当于遍历一个七位数!