关于计算某一范围内的水仙花数

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[]数组中,该数组的初始化长度也很难找到合适的初始化方法。欢迎有大佬进行指出。

猜你喜欢

转载自blog.csdn.net/weixin_39085109/article/details/80011368