Проблема с исключением с плавающей точкой

Я пробовал отладчик и лови и бросай, хотя, признаюсь, мне это тоже не по вкусу. Но я не могу найти причину исключения с плавающей точкой в ​​моей программе. Странная вещь, это работает идеально для чисел <= 35. Помимо этого, возникает исключение. Где проблема?

int fibo(int n)
{   if(n==0 || n==1)
return 1;
int p=1;
while(n>1)
p*=(n--);
return p;
}

int main()
{   int T;
int N, M;
cin>>T;
for(int i=0; i<T; i++)
{
cin>>N>>M;
int cnt=1;
int ones=N, twos=0;
if(ones==1 && M==1)
{   cout<<"CORRECT"<<endl;
continue;
}
else if(ones==1 && M!=1)
{   cout<<"INCORRECT"<<endl;
continue;
}

while(ones>=2)
{
ones-=2;
twos++;
cnt+= fibo(ones+twos)/( fibo(ones) * fibo(twos) );
}
cout<<cnt<<endl;
int tmp=0;
while(cnt>0)
{   if(cnt%2 == 1)
tmp++;
cnt/=2;
}
if(  tmp==M  )
cout<<"CORRECT"<<endl;
else
cout<<"INCORRECT"<<endl;
}

system("pause");
return 0;
}

Большое спасибо.

0

Решение

«Исключение с плавающей точкой» не является исключением C ++. try а также catch не поможет тебе Это неудачная терминология, но она исходит от ОС и больше похожа на «крах».

Еще больше сбивает с толку, вы можете увидеть это на некоторых платформах при попытке выполнить целое число деление на ноль. Я не раскрыл ваш код, но добавил множество отладочных выводов, отследил значения ваших переменных и нашел место, где вы делите на ноль, потому что, ну, вы где-то это делаете. 🙂

Единственное место, которое я вижу, это кандидат:

cnt+= fibo(ones+twos)/( fibo(ones) * fibo(twos) )
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]