Всем привет, написал код, все работает как надо.
Но валидатор жалуется, что в массиве якобы либо не хватает элементов, либо есть лишние. Помогите разобраться пожалуйста, что ему не нравится.
Логика кода простая.
Беру число из параметра - считаю количество символов числа, отдельно каждую цифру вынимаю, перемножаю нужное количество раз и
складываю с результатами умножения других цифр
package com.javarush.task.task20.task2025;
import java.util.*;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[] getNumbers(long N) {
long resultPart = 0;
long sum =0;
ArrayList<Long>resultList = new ArrayList<Long>();
//общий перебор чисел
for(long i = 0;i<N; i++) {
String n = String.valueOf(i);
char[] numbers = n.toCharArray();
int lengthN = numbers.length;
//перебор конкретного числа
for(int j = 0; j < lengthN; j++) {
String num = String.valueOf(numbers[j]);
int number = Integer.valueOf(num);
//произведение определенной цифры
for(int y = 0; y<lengthN; y++) {
if(y==0){
resultPart = number;}
else{
resultPart = resultPart*number;}
} //конец фора с произвидениями чисел
if(j==0) sum = resultPart;
else sum = sum + resultPart;
resultPart = 0;
} //конец фора с перебором конкретного числа
if(sum == i){
resultList.add(i);}
sum = 0;
}//конец фора с перебором чисел
long[] result = new long[resultList.size()];
for(int x = 0; x<resultList.size();x++){
result[x] = resultList.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(Long.MAX_VALUE)));
b = System.currentTimeMillis();
System.out.println("memory " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (8 * 1024));
System.out.println("time = " + (b - a) / 1000);
}
}