Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/55: Рейтинг темы: голосов - 55, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 4

Написать функцию вычисления факториала

30.01.2020, 08:38. Показов 11750. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача 4
Написать функцию "Факториал" и программу, использующую эту функцию для вывода таблицы факториалов.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.01.2020, 08:38
Ответы с готовыми решениями:

Написать функцию вычисления факториала
И еще вот эти две пожалуйста... 2. Написать функцию вычисления факториала (факториалом целого числа п называется число, равное...

Написать рекурсивную функцию вычисления факториала
1. Написать рекурсивную функцию вычисления факториала. помогите понять рекурсию

Написать функцию возвращающую ответ вычисления факториала
Доброго времени суток. Нужно решить три задачки. Я с С++ сталкиваюсь только сейчас. 2)Написать функцию возвращающую ответ вычисления...

16
 Аватар для Справлюсь
76 / 36 / 17
Регистрация: 24.07.2014
Сообщений: 357
30.01.2020, 15:34
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
long int factorial(int n) {       // факториал циклом
    long int mult = 1;
    for (int i = n; i > 0; i--) {
        mult *= i;
    }
    return mult;
}
 
int main() {
        for(int i = 0; i < 10; i++) {
                cout << i << "! = " << factorial(i) << endl;
        }
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.01.2020, 15:55
Справлюсь, Код рабочий, конечно. Но вам он нравится? Мне не очень. Ибо много раз повторяются одни и те же действия. На фига при подсчете 9! пересчитывать 8! ? Он же только что был вычислен!
Впрочем, виной тут скорее всего, несколько нелепая постановка задачи
Цитата Сообщение от Umisen Посмотреть сообщение
Написать функцию "Факториал" и программу...
В данном (довольно редком) случае, лучше жить без функции. Ее использование делает код неэффективным. Можно и через функцию сделать хорошо, но это излишнее усложнение получится
2
 Аватар для SerVal
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
30.01.2020, 17:45
Цитата Сообщение от Байт Посмотреть сообщение
лучше жить без функции
Функция нужна, чтобы сдать преподу.
*может пора уже переименовать раздел в "С++ для преподов."?
2
 Аватар для Справлюсь
76 / 36 / 17
Регистрация: 24.07.2014
Сообщений: 357
30.01.2020, 18:15
Цитата Сообщение от Байт Посмотреть сообщение
Справлюсь, Код рабочий, конечно. Но вам он нравится?
А это не мой код Код программы я взял из первого попавшегося сайта - лень было. Но ведь парню, наверное, не важно - хороший или плохой код. Все довольны.

Хорошая функция:
C++
1
2
3
4
5
6
7
8
9
long long factorial(int n) {
     long long fac = 1;
 
     for (int i = 2; i <= n; ++i){
          fac *= i;
     }
 
     return fac;
}
Добавлено через 2 минуты
Цитата Сообщение от SerVal Посмотреть сообщение
*может пора уже переименовать раздел в "С++ для преподов."?
Хорошая идея
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.01.2020, 19:13
Цитата Сообщение от Справлюсь Посмотреть сообщение
лень было
Отличное качество! это же главный двигатель прогресса!
Мне вот тоже лень чего-делать самому. Сижу себе на пенечке, и комментирую...

Добавлено через 6 минут
Цитата Сообщение от Справлюсь Посмотреть сообщение
Но ведь парню, наверное, не важно - хороший или плохой код
Это важно мне
Цитата Сообщение от Справлюсь Посмотреть сообщение
Все довольны.
Кроме меня. Но я-то - критикан известный! Вот увижу соринку в чужом глазу - и все тыкаю. Характер такой сварливый. Вы уж простите старика...
Да и в голову не берите. Мы ж тут ничем не меряемся. Вот увидел, что можно получше сделать - не удержался и уведомил почтенную публику.

Добавлено через 3 минуты
Цитата Сообщение от SerVal Посмотреть сообщение
Функция нужна, чтобы сдать преподу.
Правы вы 1000 раз, уважаемый! У преподов это вообще больное место - факториал. Их так можно тестировать. Чем глупее задача про факториал - тем, значит, квалификация выше...
2
 Аватар для BaLahmuT
88 / 32 / 16
Регистрация: 01.06.2019
Сообщений: 672
30.01.2020, 19:15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    int number, result;
    cout << "Введите число: ";
    cin >> number;
 
    result = 1;
 
    for (int i = 1; i <= number; i++) 
    {
        result = result * i;
    }
    cout << "Факториал " << number << " равен: ";
 
    cout << result << endl;
    system("pause");
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.01.2020, 19:17
Rudman132, Там табличка нужна
Цитата Сообщение от Umisen Посмотреть сообщение
для вывода таблицы факториалов.
0
 Аватар для BaLahmuT
88 / 32 / 16
Регистрация: 01.06.2019
Сообщений: 672
30.01.2020, 19:26
Цитата Сообщение от Байт Посмотреть сообщение
Rudman132, Там табличка нужна
не дочитал

Добавлено через 7 минут
Тогда так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
long long fact(const unsigned x) 
{
    return x < 2 ? 1 : x * fact(x - 1);
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    cout << "\tЧисло\tФакториал\n";
 
    for (unsigned i = 0; i < 15; i++) //поменять здесь чтоб увеличить таблицу 
    {
        cout << '\t' << i << '\t' << fact(i) << '\n';
    }
 
    system("pause");
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.01.2020, 19:30
Цитата Сообщение от Rudman132 Посмотреть сообщение
Тогда так
Критика в посте 3. Впрочем, можете не обращать на нее внимания.
1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
30.01.2020, 19:36
А если так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <deque>
 
uint64_t factorial(unsigned n) {
    static std::deque<uint64_t> dp = {1};
 
    if (dp.size() - 1 < n) {
        dp.push_back(n * factorial(n - 1));
    }
 
    return dp[n];
}
 
int main() {
 
    for (unsigned i = 0; i <= 20; ++i) {
        std::cout << i << "! = " << factorial(i) << std::endl;
    }
 
    return 0;
}
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.01.2020, 19:45
Цитата Сообщение от valen10 Посмотреть сообщение
А если так?
Ну да, уже приличней.
Но если тупо решать задачу - "Составить таблицу факториалов", то ничего лучше мне придумать не удалось
C++
1
2
3
4
5
6
    int result = 1;
    for (int i = 1; i <= number; i++) 
    {
        result = result * i;
        cout << i << " " << result << endl;  
    }
Конечно, тут не выполнено условие
Цитата Сообщение от Umisen Посмотреть сообщение
Написать функцию "Факториал"
Но я уже писал, что Факториал - это профессиональная болезнь "продвинутых" преподов. Они просто не знают, куда бы его засунуть.
1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
30.01.2020, 19:58
Цитата Сообщение от Байт Посмотреть сообщение
Но если тупо решать задачу - "Составить таблицу факториалов", то ничего лучше мне придумать не удалось
Согласен. Но в ТЗ сказано написать функцию. Скучная задача: факториалы, влезающие в стандартные типы, быстро закончатся, сработает любое решение в лоб. Не понятно, чему тут нужно научиться, решая её.

Цитата Сообщение от Байт Посмотреть сообщение
Они просто не знают, куда бы его засунуть
О, могу предложить много любопытных вариантов. Правда за это с форума можно вылететь, не буду рисковать
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.01.2020, 22:24
valen10, все правильно. Только я немножко о другом...
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
31.01.2020, 10:50
Цитата Сообщение от Rudman132 Посмотреть сообщение
Тогда так
C
1
2
3
4
long long fact(const unsigned x) 
{
 return x < 2 ? 1 : x * fact(x - 1);
}
Кто ж считает факториал через рекурсию?!
Цитата Сообщение от Байт Посмотреть сообщение
В данном (довольно редком) случае, лучше жить без функции. Ее использование делает код неэффективным. Можно и через функцию сделать хорошо, но это излишнее усложнение получится
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
long long int fact(unsigned int x){
  static unsigned int prev_x = 1;
  static long long prev_res = 1;
  if(x <= 0)return 0;
  if(prev_x < x){
    for(;prev_x<x; prev_x++)prev_res *= (prev_x+1);
  }else if(prev_x > x){
    for(;prev_x>x; prev_x--)prev_res /= prev_x;
  }
  return prev_res;
}
 
int main(){
  for(int i=0; i<10; i++){
    printf("%lli\t", fact(i));
  }
  printf("\n");
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
31.01.2020, 11:06
COKPOWEHEU, Конечно, можно в static сохранять результаты. По тому же пути пошел и уважаемый valen10 в посте 13. Да и я намекнул
Цитата Сообщение от Байт Посмотреть сообщение
Можно и через функцию сделать хорошо, но это излишнее усложнение получится
Я к чему? Есть такие редкие задачи, которые по всем параметром лучше решать без всяких функций. И по эффективности, и по внятности кода.
Если нужно сбацать функцию ради нее самой, много вариантов можно придумать, самых разных. Но по сути задачи функция не нужна. Плохо раздирается на части. По живому.
Это частенько случается именно там, где присутствует факториал. Вспомните хотя бы те 100100 задач, где вычисляется сумма ряда
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
31.01.2020, 11:20
Байт, честно говоря, первым "решением" было что-то вроде
C
1
2
3
4
5
long f = fact(1);
printf("%i -> %i\n", 1, f);
for(i=2; i<10; i++){
  printf("%i -> %i\n", i, f*=i);
}
Функция есть? Есть! Используется? Используется. Все условия задачи выполнены.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2020, 11:20
Помогаю со студенческими работами здесь

Написать программу, которая выводит значения факториалов чисел от 0 до N. Для вычисления факториала числа написать функцию пользователя
Написать программу, которая выводит значения факториалов чисел от 0 до N. Для вычисления факториала числа написать функцию пользователя.

Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k.
Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k. И вновь заранее благодарю,...

Реальзовать Функцию вычисления факториала числа
Функция вычисления факториала числа..

Написать программу вычисления факториала
1. Для заданного натурального числа n написать программу вычисления его факториала: n! = 1*2* … *n 2. Задано целое чётное число n....

Написать программу для вычисления факториала
Помогите! заранее спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru