Почему метод isArm() в цикле for на 3х значных числах умножает последнее число на 4?
package com.javarush.task.task20.task2025;
import java.util.ArrayList;
import java.util.*;
import java.io.*;
import java.util.Arrays;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[] getNumbers(long N) {
if(N<=0){
return new long[0]; }
Set<Long> list =new TreeSet<>() ;
for(long i =1 ;i<N;i++){
if (isfuck(i)) {
long proverka=amount(i);
if (isArm(proverka))
list.add(proverka);
}
}
long[] result=new long[list.size()] ;
int j=0;
for(long i : list){
result[j] = i;
j++;
}
return result ;
}
public static boolean isArm(long l){
long res=amount(l);
return l==res;
}
public static long amount(long l) {
int longNumb=isLength(l);
long res=0;
long num=l;
while( num!=0){
long z=num%10;
long numeral=num%10;
for(int i =1 ;i<longNumb;i++) {
numeral=numeral*z;
}
res+=numeral;
num/=10;}
return res;
}
public static int isLength(long l) {
int res=0 ;
while (l>0) {
l/=10;
res++;
}
return res ;
}
public static boolean isfuck(long i) {
long vol =0;
long i2=0;
while(i!=0 ){
vol=i%10;
i/=10;
i2=i%10;
if(vol!=0) {
if (!(vol>=i2)){
return false; }
}
}
return true;
}
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);
}
}