雷劈数编程实现
题目
编程找出N以内的雷劈数。雷劈数的定义为:若正整数X的平方可以分割为二个数字,而这二个数字相加后恰等于X,那么X的平方就是(n进位下的)一个雷劈数,又称卡布列克数。例如55^2=3025,而30+25=55,那么3025就是一个雷劈数。
10<=N<1000000
java代码实现:
import java.util.*;
class Solution {
public static void main(String[] args) {
LightningNumbers(10000);
}
/**
* 雷劈数
* @param num 原数字
* @return
*/
private static ArrayList<Integer> LightningNumbers(int num){
//存储结果集合
ArrayList<Integer> lightningNumbers = new ArrayList<>();
for (int i = 1; i <= num; i++) {
//判断n是不是雷劈数
if(isLightningNumbers(i)){
lightningNumbers.add((int) Math.pow(i,2));
}
}
System.out.println("The lightning numbers up to " + num + " are:");
for (int lightningNumber : lightningNumbers) {
System.out.println(lightningNumber);
}
return lightningNumbers;
}
private static boolean isLightningNumbers(int num) {
//平方数
int power = (int) Math.pow(num,2);
String sqrString = Integer.toString(power);
int length = sqrString.length();
if(length < 2){
return false;
}
//循环截取
for(int flag = 1;flag<length-1;flag++){
String firstHalf = sqrString.substring(0, flag);
String secondHalf = sqrString.substring(flag);
//分割得到的第一个与第二个数
int firstNum = Integer.parseInt(firstHalf);
int secondNum = Integer.parseInt(secondHalf);
if(firstNum+secondNum == num){
return true;
}
}
return false;
}
}