Что нового

Подсчитайте факториал переменной

pisikot

Свой человек
Сообщения
63
Симпатии
48
#1
Не могу понять как сделать через do while
Задача:
С помощью цикла do while подсчитайте и выведите в консоль факториал переменной а. Заданную переменную factSum используйте в качестве счетчика факториала.
Java:
public class Solution {
    public static void main(String[] args) {
        int a = 5;
        int factSum = 1;
    }
}
Вот что я сделал...
Java:
public class Solution {
    public static void main(String[] args) {
        int a = 5;
        int factSum = 1;
        int i = 1;

        do {
            factSum *= i;
            i++;
        } while (i <= a);
        System.out.println(factSum);
    }
}
 
Последнее редактирование:

mexan

Администратор
Сообщения
498
Симпатии
58
#2
Блин начну с того, что я не знаю что такое факториал числа. С математикой у меня было очень туго в школе))
Но есть же гугл;).
Факториал числа - это произведение (результат умножения данных чисел) натуральных чисел от 1 до самого числа (включая данное число).
То есть 1*2*3*4.... и так далее.
В нашем случае, это 1*2*3*4*5=120, так как int a = 5;.

Не могу понять как сделать через do while
Слушай, а задача точно правильная?? Я пока не могу решить. Если создать переменную, тогда все получается (ну как с циклом по стандарту).
Но написано: Заданную переменную factSum используйте в качестве счетчика факториала.
И в этом проблема))...
Пока ломаю голову. Еще не смотрел как ты сделал.
 

mexan

Администратор
Сообщения
498
Симпатии
58
#3
Ну вот что сделал я:
Java:
public class Main {

    public static void main(String[] args) {

        int a = 5;
        int factSum = 1;
        int b = 1;

        do {
            factSum *= b++;
            System.out.println(factSum);
        }
        while (b <= a);
    }
}
Но это не правильно решение, на самом деле. Я не выполни условие: Заданную переменную factSum используйте в качестве счетчика факториала.
int b = 1; - это типа костыля))). Но я должен использовать int factSum = 1;. Но пока у меня это не выходит, буду думать.
 

pisikot

Свой человек
Сообщения
63
Симпатии
48
#4
Вот и я добавил отдельно счетчик.
Хотя смотри.. factSum используйте в качестве счетчика факториала счетчика факториала.. а не счетчика цикла
 

mexan

Администратор
Сообщения
498
Симпатии
58
#5
Ну если так, то задача легкая. Но чет мне кажется, что имелось ввиду, что счетчик факториала, это и есть счетчик цыкла:oops:. И не писалось бы основа кода. Написали б текстом задачу и решайте.
 

mexan

Администратор
Сообщения
498
Симпатии
58
#6
Так, вот подкинули решение)):
Java:
public class Main {

    public static void main(String[] args) {

        int a = 5;
        int factSum = 1;

        do {
            factSum *= a--;
            System.out.println(factSum);
        } while (a > 1);

    }
}
Но у меня сомнения, потому что в консоли:
Java:
5
20
60
120
Что самое интересное, я так выщитывал. Но увидив вывод в консоли, посчитал это неправильным....
Спрашиваю, типа: разве это правильно, мне отвечают:
Операция умножения коммутативна.
Попросил человека расписать:
Поместительный (коммутативный) закон умножения проходят в начальных классах вроде :)
Т.е. все равно как мы посчитаем факториал 1*2*3*4*5 или 5*4*3*2*1 или еще в каком порядке.
В контексте моего решения, порядок вычислений получается такой: 1*5*4*3*2
 
Последнее редактирование:

pisikot

Свой человек
Сообщения
63
Симпатии
48
#7
Круто, я бы не додумал до такого)) а тест принял вот такой вариант:

Java:
public class Solution {
    public static void main(String[] args) {
        int a = 5;
        int factSum = 1;
        do {
            factSum *= a;
            a--;
        } while (a > 1);
        System.out.println(factSum);
    }
}
 
Вверх Снизу