Вроде даже числа из примера на экран выводятся..
Почему Валя не пускает?
package com.javarush.task.task20.task2025;
import java.util.*;
/*
Алгоритмы-числа
Число S состоит из M цифр, например, S=370 и M (количество цифр) = 3
Реализовать логику метода getNumbers, который должен среди натуральных чисел меньше N (long)
находить все числа, удовлетворяющие следующему критерию:
число S равно сумме его цифр, возведенных в M степень.
getNumbers должен возвращать все такие числа в порядке возрастания.
Пример искомого числа:
370 = 3*3*3 + 7*7*7 + 0*0*0
8208 = 8*8*8*8 + 2*2*2*2 + 0*0*0*0 + 8*8*8*8
На выполнение дается 10 секунд и 50 МБ памяти.
Метод main не участвует в тестировании.
Требования:
1. В классе Solution должен присутствовать метод public static long[] getNumbers(long N)
2. В методе getNumbers не должно возникать исключений, при любых входных данных.
3. Все найденные числа должны быть строго меньше N.
4. Метод getNumbers должен возвращать массив чисел удовлетворяющих условию задачи.
*/
public class Solution {
public static long[] getNumbers(long N) {
if(N < 1) return new long[0];
long[] result = null;
List<Long> list = new ArrayList<>();
for(long i = 1; i < N; i++){
if(getNum(i)){
list.add(Long.valueOf(i));
}
}
Collections.sort(list);
result = new long[list.size()];
for(int i = 0; i < list.size(); i++){
result[i] = list.get(i);
}
return result;
}
public static boolean getNum(long N){
int m = getM(N);
//System.out.println(m);
long n = N;
// System.out.println(n);
long j = 0;
//System.out.println(j);
while(n > 0){
int k = (int)n%10;
n /= 10;
j += Math.pow(k, m);
}
// System.out.println(N + " " + j);
if(N == j)
return true;
return false;
}
public static int getM(long N){
int result = 1;
while((N /= 10) > 0){
result++;
}
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);
}
}