Если не делаю проверку входного числа N, то выдает ошибку: Проверь, что в методе getNumbers не возникает исключения, при любых входных данных.
Задачу решаю с воскресенья, переписывала и исправляла код несколько раз, искала в гугле, здесь в разделах комментариев и помощи. Тестирую на Интегер Макс Вэлъю, 106 сек, 50 МБ. Лонг Макс Вэлъю - не хватает нервов.
Просто засунуть массив готовых Армстронг чисел не хочу - это не решение.
Если кто-то может помочь исправить данный код, буду очень рада. Если совсем не годится, то пойду дальше и буду надеяться, что когда-то дорасту :)
В режиме самоизоляции со всей семьей дома, не просто найти свободное время для учебы, хочется использовать его эффективно :)
package com.javarush.task.task20.task2025;
/*
Алгоритмы-числа
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
public class Solution {
private static long[][] matrix = getMatrix();
private static ArrayList<Long> list = new ArrayList<>();
private static long[][] getMatrix() {
long[][] matrix = new long[10][19];
for (int i = 0; i < matrix.length; i++) {
for (int j = 1; j < matrix[i].length + 1; j++) {
matrix[i][j - 1] = (long) Math.pow(i, j);
}
}
return matrix;
}
private static boolean isArmstrong(long number, long sum) {
if (sum == number) {
return true;
} else {
return false;
}
}
private static long sum(long number) {
int length = String.valueOf(number).length();
long sum = 0;
long rest = number % 10;
while (number >= 1) {
sum += matrix[(int) rest][length - 1];
number /= 10;
rest = number % 10;
}
return sum;
}
public static long[] getNumbers(long N) {
if(N > 0) {
for (long i = 1; i < N; i++) {
long sum = sum(i);
if (isArmstrong(i, sum)) {
list.add(sum);
}
}
}
long[] armstrongNumbers = new long[list.size()];
for (int i = 0; i < list.size(); i++) {
armstrongNumbers[i] = list.get(i);
}
return armstrongNumbers;
}
public static void main(String[] args) {
Date start = new Date();
System.out.println(Arrays.toString(getNumbers(Long.MAX_VALUE)));
Date end = new Date();
System.out.println((end.getTime() - start.getTime()) / 1000);
long memory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
System.out.println(memory / 1048576);
}
}