Реализация алгоритма получения перестановки по номеру и алфавиту

Всем привет, возникла проблема расчете факториала в функции PermFromNum(): в функцию facroriz(),которая считает факториал числа, почему-то постоянно передается нуль, хотя в функции fromFactorialNS() расчет факториала происходит корректно. Всю голову сломал, ошибку найти не могу.

class Factorial{
       int value;
       int power;
       public Factorial(int value) {
           this.value = value;
           }

       public Factorial(int value, int power) {
           this.value = value;
           this.power = power;
       }

       public int factoriz(int value) {
           if (value<0)return 0;
           else if (value ==0) return 1;
           else return value*factoriz(value-1);
       }
 public int fromFactorialNS(int value){
           int result = 0;
           for (int i = 0; value>0;i++){
               result +=value%10*factoriz(i+1);
               value /=10;
           }
           return result;
       }
       int permFromNum(int number){
           int result = 0;
           int [][] Array = new int[power][3];
           for (int i = 0; i<power;i++){
               Array[i][0] = factoriz(number-1)/(int)pow(10,power-2-i);
               System.out.println(Array[i][0]);
               number -=Array[i][0]*pow(10,power-2-i);
           }
           for (int i = 0;i<power;i++) Array[i][1]=i+1;
           for (int i=0;i<power;i++){
               for (int j = 0;j<power;j++){
                   if (Array[i][0]==j){
                       Array[i][2] = Array[j][1];
                       for (int k=j;k<power-1;k++){
                           Array[k][1] = Array[k+1][1];
                       }
                       Array[power-1][1] = 0;
                   }
               }
           }
           for (int i=0;i<power;i++){
               result +=Array[i][2]*(int)pow(10,power-i-1);
           }
           return result;
       }
   }

Ответы (1 шт):

Автор решения: Иван Петрухин

Всё правильно у тебя работает) Смотри! factoriz(number - 1) возвращает тебе всё правильно. Пробуй воспроизвести его отдельно, просто значения проверить. Потом у тебя идет деление на pow(). pow тоже работает как написано, а вот теперь обрати на типы данных. Ты int делишь на int, и хочешь получить double? Не выйдет, 1 / 100, ты получишь 0. Если хочешь исправить, то поменяй типы данных на double. Также с массивом Array[][], он у тебя int. И еще, писать переменные с большой буквы - плохая практика. Почитай по review кода

Array[i][0] = factoriz(number - 1) / (int) pow(10, power - 2 - i);
→ Ссылка