Hello everyone
I would appreciate any help, thoughts, insights on how the code can be improved to meet last requirement. Thanks in advance
package com.codegym.task.task20.task2025;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
Number algorithms
*/
public class Solution {
public static long[] getNumbers(long N) {
if (0 < N && N < Long.MAX_VALUE) {
long[] powersOfDigits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] setOfDigits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Long> temp = new ArrayList<>();
int digitCounter = 10;
int power = 1;
long sum = 0;
for (int i = 1; i < N; i++) {
if (digitCounter <= i) {
digitCounter *= 10;
power++;
for (int j = 2; j < powersOfDigits.length; j++) {
powersOfDigits[j] = (long) Math.pow(setOfDigits[j], power);
}
}
int tempNumber = i;
while (!(tempNumber < 10)) {
sum += powersOfDigits[tempNumber % 10];
tempNumber /= 10;
}
sum += powersOfDigits[tempNumber];
if (sum == i) {
temp.add(sum);
}
sum = 0;
}
long[] result = new long[temp.size()];
for (int i = 0; i < result.length; i++) {
result[i] = temp.get(i);
}
return result;
}
return null;
}
public static void main(String[] args) {
long a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(10)));
long b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(1000000)));
b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
}
}
//public static long[] getNumbers(long N) {
// if (0 < N && N < Long.MAX_VALUE) {
// int power = 1;
// long sum = 0;
// List<Long> temp = new ArrayList<>();
// int digitCounter = 10;
// for (int i = 1; i < N; i++) {
// if (i % digitCounter == 0) {
// power++;
// digitCounter *= 10;
// }
// double tempNumber = i;
// if (1 < power) {
// int parser = 10;
// while (!(tempNumber < 10)) {
// sum += (long) Math.pow(tempNumber % parser, power);
// tempNumber = (int) (tempNumber / parser);
// }
// sum += (long) Math.pow(tempNumber, power);
// if (sum < N && i == sum) {
// temp.add(sum);
// } else {
// sum = 0;
// continue;
// }
// } else {
// sum = (long) Math.pow(tempNumber, power);
// temp.add(sum);
// }
// sum = 0;
// }
// long[] result = new long[temp.size()];
// for (int i = 0; i < result.length; i++) {
// result[i] = temp.get(i);
// }
// return result;
// }
// return null;
//}