public class TestDemo {
/**将多位数分割成单个数字的方法一*/
public int[] storeNum1(int number) {
int[] num = new int[10]; //用于存储分割后的数字
int index = 0; //用于标记数组下标
int singleNum = 0; //用于记录得到的各位上数值
while(number!=0) {
singleNum = number%10;
number = number/10;
num[index] = singleNum;
index++;
}
return num;
}
/**将多位数分割成单个数字的方法二*/
public int[] storeNum2(int number) {
String str = String.valueOf(number);//将数字转换成字符串
int[] num = new int[str.length()];//用于存储分割后的数字
for (int i=0; i<str.length(); i++) {
String singleStr = str.substring(i, i+1);//得到单个字符
int singleNum = Integer.parseInt(singleStr);//将单个字符转换成数字
num[i] = singleNum;
}
return num;
}
/**判断是否属于水仙花数*/
public boolean isNarcissus(int number) {
int sum = 0;//用于计算立方和
for (int singleNum : this.storeNum2(number)) {//遍历数组中的每个数字
sum = sum + singleNum*singleNum*singleNum;
}
if (sum==number) {//判断是否属于水仙花数
return true;
}else {
return false;
}
}
/**得到某个范围内的水仙花数组*/
public int[] getNarcissusNum(int minNum,int maxNum) {
int[] narcissusNum = new int[10];//用于存储得到的水仙花数
int index = 0;//用于标记数组下标
for (int i=minNum; i<=maxNum; i++) {
if (isNarcissus(i)) {
narcissusNum[index] = i;
index++;
}
}
return narcissusNum;
}
public static void main(String[] args) {
TestDemo td = new TestDemo();
int[] result = td.getNarcissusNum(100, 20000);
System.out.println(Arrays.toString(result));
}
}
代码中的方法一是一种比较初级的方法来分割长数字,但是存在一个问题。用于存储分割后的单个数字的数组长度很难进行合适的初始化。同样的问题包括在getNarcissusNum方法中的narcissusNum[]数组中,该数组的初始化长度也很难找到合适的初始化方法。欢迎有大佬进行指出。