0 / 0 / 0
Регистрация: 23.01.2024
Сообщений: 3

Программа для нахождения C из n по k начиная с определённого порога входных данных начинает давать сбой. Где ошибка?

23.01.2024, 22:15. Показов 3303. Ответов 26

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int factorial(int number)
{
    if (number < 0)
        return 0;
    if (number == 0)
        return 1;
    else
        return number * factorial(number - 1);
}
int main()
{
    int n, k, result;
    cout << "n = ";
    cin >> n;
    cout << "k = ";
    cin >> k;
    result = factorial(n) / factorial(k) / factorial(n - k);
    cout << result << endl;
    return result;
}
Программа выше работает стабильно, пока n не превышает 12, причём при любых допустимых значениях k (при условии, что они меньше или равны n, так работает сама формула).

Но как только я пытаюсь поставить n = 13 или выше, она почему-то начинает выдавать неправильный результат, снова не зависимо от значения k. Я не понимаю с чем это связано, помогите пожалуйста.

Математическая формула во вложении.
Изображения
 
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2024, 22:15
Ответы с готовыми решениями:

Программа для нахождения определенного интеграла
Помогите, написать программу для нахождения определенного интеграла с точностью Е = 10-3 для заданных границ с помощью трех методов: ...

Программа для нахождения определенного интеграла с использованием метода прямоугольника ,трапеции и Симпсона
Помогите, написать программу для нахождения определенного интеграла с использованием метода прямоугольника ,трапеции и Симпсона для функции...

Может ли JS давать сбой?
Здравствуйте! Задумал сделать вот какой дизайн страницы. Хэдер, содержимое, футер - все как обычно. Но справа от содержимого -...

26
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,447
29.01.2024, 21:08
Студворк — интернет-сервис помощи студентам
Читай внимательно
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,350
29.01.2024, 22:12
Цитата Сообщение от gunslinger Посмотреть сообщение
А зачем ООП? Для длинной арифметики?
Для длинной арифметики нет необходимости в ООП.
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
29.01.2024, 22:45
vlisp, читал (невнимательно), но суть уловил. Я (неожиданно) подумал про какой-то другой "особенный" способ.

alexu_007, ну это понятно (хотя предположение мое частично и логичное).
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,447
30.01.2024, 13:15
Цитата Сообщение от alexu_007 Посмотреть сообщение
Для длинной арифметики нет необходимости в ООП.
Нет необходимости в ооп вообще, однако ж его используют чтобы что?

Цитата Сообщение от gunslinger Посмотреть сообщение
Я (неожиданно) подумал про какой-то другой "особенный" способ.
особенность способа в том, что дроби можно сокращать и без всяких даблов (был тут такой способ)
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2024, 16:26
Цитата Сообщение от vlisp Посмотреть сообщение
накосячтылил, но вот тут все работает
только оччччень медленннооо
прикол в том, что на питоне задачка решается вообще в 4 строчки
Добавлено через 7 минут
И еще попробуйте посчитать таким методом
...
а
Кликните здесь для просмотра всего текста
такое решает
vlisp, вы то хотите в одну строку на Python , то очень быстро. Налицо недовольство любым вариантом, кроме ООП.
В ссылке на Хабр я увидел пользу от использования симметрии биномиального треугольника. Но она не в скорости, как таковой, поскольку в цепи сложений число линий не изменяется, а лишь меняется порядок слагаемых. А в той оптимизации своего костыля, что я сейчас покажу оно пригодится, так как избавит от лишних проверок и перестановок, используя тот факт, что в левой ветви, симметрии коэффициенты, гарантировано, идут по возрастанию слева на право.
Тут предлагается снизить количество рекурсивных вызовов учитывая то, что последующий коэффициент легко получить из предыдущего: Cn-1__k = Cn_1__k-1 * (n-k-1)/k
Некоторое снижение порога переполнения тоже есть.
Но о числах сочетаний из 30 по 49 я не слыхивал. Торопились, наверное.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
unsigned long long c_n_k(long long n, long long k)
{
    if (k>n/2) k=n-k;//это полезно чтобы гарантировать C_n-1_k-1<C_n-1__k-1
    if(0==k)return 1;
    if(1==k)return n;
    if(1==n)return 0;
 
    long long C_m_p = c_n_k(n-1, k-1) ; //C из n-1 по k-1
 
    auto divideble=C_m_p/k;
 
    auto non_divideble=C_m_p%k;
 
    auto koef = (n - k) ;
 
    auto  C_m_k = koef*divideble + (koef*non_divideble)/k ;
 
    return C_m_p + C_m_k ;
}
 
int main()
{
    cout<<c_n_k(49,30)<<'\n';
    return 0;
}
Я по крайней мере, сам это сделал. Один-хря, без Хабра-хря))
1
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
31.01.2024, 17:01
Цитата Сообщение от IGPIGP Посмотреть сообщение
if (k>n/2) k=n-k;//это полезно чтобы гарантировать C_n-1_k-1<C_n-1__k-1
Комментарий, видимо, нужно подправить в конце (там, где сравнение происходит).
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2024, 17:22
Цитата Сообщение от gunslinger Посмотреть сообщение
Комментарий, видимо, нужно подправить в конце (там, где сравнение происходит).
gunslinger, спасибо. Конечно, должно было быть:
C++
1
if (k>n/2) k=n-k;//это полезно чтобы гарантировать C_n-1_k-1<C_n-1__k
Думаю, модераторы пофиксят)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2024, 17:22

Укажите количество целых значений параметра А, при которых для указанных входных данных программа напечатает «ДА» 5 раз
Ниже приведена программа, записанная на пяти языках программирования. s = int(input()) k = int(input()) A = int(input()) if s...

Запрет на изменение размера слайдера ниже определенного порога
Имеется слайдер, хочу что-бы его нельзя было ресайзить ниже порога пикселей, как правильно это сделать подскажите. echo &quot;&lt;p...

Найти числа, квадраты которых меньше определенного порога
Дано натуральное число N (к примеру 650). Найти числа, которые меньше N (в нашем случае меньше 650) что бы был ответ 5^2=25 6^2=36...

программа входных и выходных данных!!!
помогите с программой по ИКТ. нужно написать в Turbo Pascale Одной из важных задач, возникающих при разработке почтового клиента,...

Программа для нахождения корней квадратного уравнения, ошибка
Здравствуйте, Уважаемые форумчане! Вообщем у меня проблема... program my; var a, b, c : Integer; x : Real; xR ...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru