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

Факториалы

21.11.2019, 14:59. Показов 1121. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть задача, в которой нужно найти сумму факториалов a!+b!+c!=d и после этого найти факториал от этого самого d. При написании кода возникла ошибка и понимания, что я делаю что-то не так. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
int fact (int a, int b, int c, int d){
    int s=1, z=1, q=1, t=1;
    for (int i=a;i>=1; i--)
    s=s*i;
    for(int i=b;i>=1; i--)
    z=z*i;
    for(int i=c;i>=1;i--)
    q=q*i;
    
    d=z+q+s;
    for(int i=d;i>=1;i--)
    t=t*i;
    printf("%d",t);
return 0;
}
int main (){
    int a,b,c,d=0;
    scanf("%d%d%d", &a , &b , &c);
    fact(a, b, c, d);
return 0;
}
При исполнении программы, выводимый ответ явно неправильный. Хотелось бы узнать почему и как это исправить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2019, 14:59
Ответы с готовыми решениями:

Факториалы в while
можно ли хоть каким-то реализуемым способом засунуть внутрь условия цикла while факториалы? мне например надо чтобы &quot;такой то х в...

Факториалы
http://acm.timus.ru/problem.aspx?space=1&amp;num=1083 помогите решить эту задачу у меня мысль есть, но похоже неправильная. ...

Факториалы...
Приветствую. Если напишу, что нужна помощь в решении задачи - сурово вас обману. Помощь не нужна - нужно решение. Язык - Си, среда Dev-C++ ...

6
 Аватар для COKPOWEHEU
4084 / 2682 / 432
Регистрация: 09.09.2017
Сообщений: 11,933
21.11.2019, 15:29
интуитивно кажется, что функция с названием fact будет считать факториал. Но у вас она считает непонятно что от целых четырех переменных, да еще и вместо результата возвращает ноль. Представьте себе, что вам завтра понадобится считать факториал суммы двух чисел, деленный на косинус третьего - неужели будете писать функцию строго под задачу?
Лучше уж распишите "нормальную" функцию unsigned long long fact(unsigned long long x) (факториалы растут быстро, тут не надо экономить на типах данных), тщательно протестируйте и реализуйте свой алгоритм с ее помощью.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
21.11.2019, 22:22
CuriousSeal, Скорее всего происходит переполнение разрядной сетки. Числа получаются больше представимых выбранным типом данных. При этом счет продолжается, но у результата отбрасываются СТАРШИЕ разряды. Естественно, получается ахинея.
И вы представлянте, с какими числами придется работать?
Пусть a = 3, b= 4, c = 5 (небольшие числа, правда?)
a! = 6
b! = 24
c! = 124
d = 154
d! - это число "чуть" побольше 10200. Никакие встроенные типы (даже long long double) с ним не справятся
Выход тут - привлекать длинную арифметику. Да и то, если числа чуть-чуть побольше, может памяти компьютера не хватить Не только вашего, но и всех компьютеров мира вместе взятых.
И да, как правильно заметил уважаемый COKPOWEHEU, организация программы чудовищная. И если вы не бросите это занятие, вам еще предстоит многому учиться. Но пока - это дело десятое.
0
 Аватар для Lady C
21 / 17 / 4
Регистрация: 31.05.2016
Сообщений: 67
22.11.2019, 08:02
Цитата Сообщение от Байт Посмотреть сообщение
c = 5
Цитата Сообщение от Байт Посмотреть сообщение
c! = 124
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.11.2019, 10:41
Lady C, Спасибо за бдительность!
с = 6
с! = 120
d = 150
Но всего остального это не отменяет...

Добавлено через 1 минуту
Возможно, ошибcя в оценки d!, но думаю не более чем на 5-10%
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
22.11.2019, 14:00
Цитата Сообщение от CuriousSeal Посмотреть сообщение
Хотелось бы узнать почему и как это исправить?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
long fact(long n)
{
    long i,r=1;
    for (i=2; i<=n; i++) r*=i;
    return r;
}
int main()
{
    long a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    printf("%d\n",fact(fact(a)+fact(b)+fact(c)));
}
Но не пытайся вводить числа, большие трех...

Добавлено через 1 минуту

Lisp
1
2
3
4
5
6
7
8
(fact (+ (fact 3) (fact 4) (fact 5)))
 
==> 
 
57133839564458545904789328652610540031895535786011264182548375833179829124845
39839312657448867531114537710787874685420416266625019868450446635594919592206
65749425920957357789293253572904449624724054167907221184454371222696755200000
00000000000000000000000000000000
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.11.2019, 14:52
При вычислении больших факториалов можно слегка сэкономить подсчитав предварительно количество нулей. Но по большому счету это не лечит. Так, припарки...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2019, 14:52
Помогаю со студенческими работами здесь

Факториалы!
В лабе нужно вычислить выражение, в котором находятся числа с факториалами в таком порядке: 1!+2!+...+К!, я не знаю как это описать в...

Факториалы
Добрый день , не могу понять почему не работает программа . Вроде все сделал корректно , и результат показывает , только значения Y(x) и...

Факториалы числа
Дано число N. Рассчитать и вывести первые N факториалов. (1!, 2! ... N!) Задача-то лёгкая, но есть одна загвоздка: переменная цикла и...

Большие факториалы
Помогите написать программу,котороя щитает большые фактуриалы(100!,200! и тд)

Рекурсия: вывести факториалы от 1 до 10
Нужно рекурсивно вывести все факториалы от 1-го до 10


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru