Реализация алгоритма получения перестановки по номеру и алфавиту
Всем привет, возникла проблема расчете факториала в функции 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);