It says that my code is taking too long to end its work. Any idea how to make it work faster? I can assure you that the results given are accurate to the task condition.
package pl.codegym.task.task20.task2025;
import java.util.ArrayList;
import java.util.Arrays;
/*
Algorytmy liczbowe
*/
public class Solution {
public static long[] getNumbers(long N) {
ArrayList<Long> lista = new ArrayList<>();
for (long x = 1; x < N; x++){
long a = 0;
char[] charTab = Long.toString(x).toCharArray();
for (Character every : charTab){
a += Math.pow(Double.parseDouble(Character.toString(every)), Double.parseDouble(Integer.toString(charTab.length)));
}
if (x == a){
lista.add(x);
}
}
long[] result = new long[lista.size()];
for (int x = 0; x < lista.size(); x++){
result[x] = lista.get(x);
}
return result;
}
public static void main(String[] args) {
long a = System.currentTimeMillis();
System.out.println(Arrays.toString(getNumbers(1000)));
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);
}
}