Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что делает этот код и как он работает?

sfagasfd gvfdc Ученик (95), на голосовании 4 месяца назад
 #include  
#include
using namespace std;

vector fast_factorial(int n) {
vector factorial = { 1 };
for (int i = 2; i <= n; i++) {
int a = 0;
for (int j = 0; j < factorial.size(); j++) {
int b = factorial[j] * i + a;
factorial[j] = b % 10;
a = b / 10;
}
while (a) {
factorial.push_back(a % 10);
a /= 10;
}
}
return factorial;
}
int main() {
setlocale(LC_ALL, "ru");
int n, a;
cout << "Введите число, для которого нужно вычислить факториал: ";
cin >> n;
cout << endl << "Факториал числа " << n << " равен: ";
vector factorial = fast_factorial(n);
for (int i = factorial.size() - 1; i >= 0; i--) {
cout << factorial[i];
}
cout << endl << endl << endl;
cout << "Введите любое число что-бы закрыть данную программу: ";
cin >> a;
}
Голосование за лучший ответ
Jopich111 Мыслитель (8094) 5 месяцев назад
Факториал считает
sfagasfd gvfdcУченик (95) 5 месяцев назад
Как работает?
Jopich111Мыслитель (8094) 5 месяцев назад
Ну тут довольно сложно, я сам не очень разобрался, времени мало щас. Вектор используется, чтобы работать с цифрами чисел. Число как бы на ячейки разбивается. Тут какой-то прикольный механизм того, как эффективно перемножать числа по разрядам походу
Татьяна Просветленный (36374) 5 месяцев назад
Этот код реализует вычисление факториала большого числа (n!) и выводит его в консоль. Он использует вектор для хранения цифр результата, что позволяет обойти ограничение на размер целых чисел в C++.
Подключение библиотек и пространств имен:
 #include  
#include
using namespace std;
Функция fast_factorial:
 vector fast_factorial(int n) { 
vector factorial = { 1 };
for (int i = 2; i <= n; i++) {
int a = 0;
for (int j = 0; j < factorial.size(); j++) {
int b = factorial[j] * i + a;
factorial[j] = b % 10;
a = b / 10;
}
while (a) {
factorial.push_back(a % 10);
a /= 10;
}
}
return factorial;
}
Создается вектор factorial, который инициализируется значением {1}.
Цикл for (int i = 2; i <= n; i++) проходит от 2 до n, чтобы умножить текущее значение факториала на каждое число до n.
Вложенный цикл for (int j = 0; j < factorial.size(); j++) проходит по каждому элементу вектора, умножая его на текущее значение i и добавляя перенос (a).
Операция b % 10 сохраняет текущую цифру, а b / 10 вычисляет перенос для следующей цифры.
После завершения внутреннего цикла, любые оставшиеся переносы добавляются как новые цифры в конец вектора.

Функция main:
 int main() { 
setlocale(LC_ALL, "ru");
int n, a;
cout << "Введите число, для которого нужно вычислить факториал: ";
cin >> n;
cout << endl << "Факториал числа " << n << " равен: ";
vector factorial = fast_factorial(n);
for (int i = factorial.size() - 1; i >= 0; i--) {
cout << factorial[i];
}
cout << endl << endl << endl;
cout << "Введите любое число что-бы закрыть данную программу: ";
cin >> a;
}
Устанавливается локаль для корректного отображения русских символов.
Пользователь вводит число n.
Вызывается функция fast_factorial(n), и результат сохраняется в вектор factorial.
Цикл for (int i = factorial.size() - 1; i >= 0; i--) выводит цифры факториала в обратном порядке, чтобы получить правильное число.
Ввод любого числа для закрытия программы.
Похожие вопросы