标签 java 下的文章

水仙花数,n位数字,假设n为3,数字为153,

那么1的3次方,加上5的三次方,加上3的三次方等于153,则称153为水仙花数。

我们需要写出,输入n,输出其位数的所有水仙花数。

代码在运行的时候比较慢,需要多等一会儿,

代码实现:

n位数的水仙花数,假设n为3,则水仙花数的范围是100到1000,

在这个范围内,判定一个数,假设判定100,分割100,为,1,0,0

然后分别计算分割出的字符串的n次幂(1的3次方,0的3次方,0的3次方),

然后相加,对比是否等于原数字,

如果是原数字,则为水仙花数,加入结果数组

最后打印出结果数组

最后!让代码说话!

import java.util.ArrayList;
import java.util.Scanner;

/**
 * @Author: LanHao
 * @Website:https://lanhaoo.club/
 * @Created_Date:8:15 PM_5/23/2019
 * @Magic_Power_Of_Code!
 */

public class water_flower {
    public static void main (String[] args){
        Scanner scanner=new Scanner(System.in);
        String n=scanner.nextLine();
        int new_n=Integer.valueOf(n);
        //todo 判断是否为数字

        String range_left="1";
        String range_right="1";
        String[] a;
        ArrayList result1=new ArrayList();

        for (int i = 0; i<new_n-1;i++){
            range_left=range_left+"0";
        }
        for (int i = 0; i<new_n;i++){
            range_right=range_right+"0";
        }
        int new_range_l=Integer.valueOf(range_left);
        int new_range_r=Integer.valueOf(range_right);
        System.out.println(new_range_l);
        System.out.println(new_range_r);

        for(int ii=new_range_l;ii<new_range_r;ii++){

            double final_answer=0;
            String i=String.valueOf(ii);
            a=i.split("");
            for (int j=0;j<a.length;j++){
                int cc=Integer.valueOf(a[j]);
                final_answer=final_answer+Math.pow(cc,new_n);
            }
            if(final_answer==ii){
                result1.add(ii);
            }



        }
        System.out.println(result1);
    }
}