Выдает ошибку
package com.javarush.task.task20.task2025;
import java.util.Arrays;
import java.util.Iterator;
import java.util.TreeSet;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[][] pows = new long[10][19];
static {
for (int i = 0; i <10 ; i++) {
for (int j = 0; j <19 ; j++) {
pows[i][j]=pow(i,j+1);
}
}
}
public static long[] getNumbers(long N) {
TreeSet<Long> list = new TreeSet<>();
for (long i = 1; i <N;) {
long cor = returnCorrect(i);
if (cor==0L)
break;
if (i==cor || i%10==0){
long b = sumAndCheck(i);
if(b!=0)
list.add(b);
i++;
}
else
i=cor;
}
Iterator<Long> iterator = list.iterator();
while (iterator.hasNext()){
long a = iterator.next();
if (a>N){
iterator.remove();
}
}
int j =0;
long[] result=new long[list.size()];
for (long a:list){
result[j] = a;
j++;
}
return result;
}
public static long pow(long a, long pow){
long result = a;
for (int i = 1; i <pow ; i++) {
result*=a;
}
return result;
}
public static long returnCorrect(long a){
String text = Long.toString(a);
char[] s = text.toCharArray();
for (int i = 1; i <s.length ; i++) {
if (Character.getNumericValue(s[i])<Character.getNumericValue(s[i-1])){
return returnCorrectnum(text.substring(0,i),text.length());
}
}
return a;
}
public static long sumAndCheck(long a){
int len = Long.toString(a).length();
long res =0;
for (char s :Long.toString(a).toCharArray()){
res+=pows[Character.getNumericValue(s)][len-1];
}
if (Long.toString(a).length()!=Long.toString(res).length())
return 0;
char[] aa = Long.toString(a).toCharArray();
char[] bb= Long.toString(res).toCharArray();
Arrays.sort(aa);
Arrays.sort(bb);
for (int i = 0; i < aa.length; i++) {
if (aa[i]!=bb[i])
return 0;
}
return res;
}
private static long returnCorrectnum(String a, int x){
String result = a;
String inc = result.substring(result.length()-1);
result+=inc;
int count=x-result.length();
for (int i = 0; i <count ; i++) {
result+="0";
}
if (result.equals("9900000000000000000"))
return 0L;
return Long.parseLong(result);
}
public static void main(String[] args) {
Long t0 = System.currentTimeMillis();
//long n = 12643516734L; //1.204
long n = Long.MAX_VALUE; //1.978
//long n = Long.MAX_VALUE; //9.62
//int n = 2147483647;//22.338 - 24.887
long[] lst = getNumbers(n);
Long t1 = System.currentTimeMillis();
System.out.println("time: " + (t1 - t0) / 1000d + " sec");
System.out.println("memory: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024) + " mb");
for (int i = 0; i < lst.length; i++) {
System.out.print(lst[i] + ", ");
}
System.out.println();
}
}
/*
1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748,
92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315,
24678050, 24678051, 88593477, 146511208, 472335975, 534494836,
912985153, 4679307774L, 32164049650L, 32164049651L, 40028394225L,
42678290603L, 44708635679L, 49388550606L, 82693916578L,
94204591914L, 28116440335967L, 4338281769391370L, 4338281769391371L,
21897142587612075L, 35641594208964132L, 35875699062250035L,
1517841543307505039L, 3289582984443187032L, 498128791164624869L, 4929273885928088826L
*/