问题:水仙花数是指一个 n 位的整数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
思路:将给定的整数数的各个位上的数拆分,用ArrayList数组保存;然后根据(例如:1^3 + 5^3 + 3^3 = 153)条件判断。
下面代码为求得区间[n,m]的水仙花数的个数
//拆分给定的数的各个位,保存到ArrayList数组中,其中ArrayList的大小就是给定数的位数
public static ArrayList spiltNum(ArrayList arr, int x){
int n=getNum(x);
for(int i=0;i<n;i++){
arr.add(x%10);
x/=10;
}
return arr;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a=scanner.nextInt();
int b=scanner.nextInt();
ArrayList arr=new ArrayList();
int count=0;//定义水仙花的个数变量
for (int i=a;i<=b;i++){
int sum=0;//定义各个位的数字n次幂之和
arr=spiltNum(arr,i);
for (int j=0;j<arr.size();j++){
sum+= (int) Math.pow((int)arr.get(j),arr.size());
}
if (sum==i)
count++;
arr.clear();
}
System.out.println(count);
}
延伸:怎样求得一个整数的位数
使用循环
public static int getNum(int x){
int a=x;
int count=0;
while (a/10!=0){
a=a/10;
count++;
}
return ++count;
}