При вводе A = 20 вы вызываете fact(20 - 1)
и fact(20 - 1 + 20 - 1)
, которые fact(19)
fact(38)
.Факториал 19 равен 121645100408832000, а факториал 38 равен 523022617466601111760007224100074291200000000.
На типичном ПК наибольшее представимое значение для int
равно 2147483647, что меньше любого из вышеуказанных факториалов, которые вы пытаетесь вычислить.Ваша программа переполняет целое число со знаком, и поведение программы не определено.
Я не думаю, что в моем коде есть какая-то точка, я ... делю ее на ноль
(val1*val1)%1000000007
может быть нулем для некоторых значений val1
.Поэтому val2/((val1*val1)%1000000007)
может делиться на ноль.Простой случай, когда это имеет место, когда val1
равен нулю, а другой случай, когда это 1000000007. Возможно, вы думаете, что val1
никогда не может быть ни одним из этих значений, поскольку они не являются факториалами, но это может быть полностьюлюбое значение, если вы перепрограммировали подпись в вашей программе.
Наибольшее факториальное представление, представляемое как 32-битное целое число, равно 12!и, следовательно, самый большой вход, который может решить ваша функция - это A = 7.