Предмет: Информатика,
автор: Лена2012
Помогите разобраться что не так с кодом. Программа считает факториал 40 и 20, после чего выводит значение формулы: 40!/(20!*20!), должно получиться 137846528820, но выводит 0.
Приложения:
Ответы
Автор ответа:
2
Давайте кое-что проясним.
- Если факториал 20 ещё вмещается в возвращаемый тип long, то факториал 40 уже не влезет.
- Вы делаете лишний вызов функции Factorial только из-за того, что не делаете проверку, является ли n равным 1. Это никак не помешает работе программы, но лучше о таких вещах заботиться ещё на уровне составления алгоритма.
- Так как long является типом int64, то n1 и n2 - целочисленные переменные.
Первый пункт
мы можем решить только путём изменения типов переменных n1 и n2 на float или double.
Второй пункт
решается добавлением в условие проверки на равенство единице:
- if (n == 0 || n == 1)
А также лучше позаботиться о вводе отрицательных чисел. Но я не стану отнимать хлеб у преподавателя и у Вас в том числе, поэтому думайте сами, как решить эту и другие проблемы :)
Третий пункт
стоит показать на примере:
- int i = 10;
- int j = 20;
- Console.WriteLine(i / j); // output: 0
Почему так происходит? Мы делим 10 на 20 и хотели бы получить 0.5, но тут требуется посмотреть на тип. Он априори не может хранить в себе числа после запятой. Это целочисленный тип. То есть после такого деления отбрасывается .5 и ответ получается равен нулю.
Более правильный код
(скриншот)
Приложения:
Похожие вопросы
Предмет: География,
автор: davidskarpenko30
Предмет: Английский язык,
автор: adiya060501
Предмет: Химия,
автор: illarao
Предмет: Математика,
автор: Happy631