我尝试了一个调试器和Catch并抛出,虽然我承认我也不习惯。但我无法在程序中找到浮点异常的原因。奇怪的是它运行完美的数字< = 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 :(得分:1)
“浮点异常”不是C ++异常。 try
和catch
对您无济于事。这是不幸的术语,但它来自操作系统,更像是“崩溃”。
更令人费解的是,在尝试执行整数除以零时,您可以在某些平台上看到它。我没有解开你的代码,但添加了大量的调试输出并跟踪变量的值,并找到你除以零的地方,因为,好吧,你在某处做了。 :)
我能看到的唯一一个候选人是:
cnt+= fibo(ones+twos)/( fibo(ones) * fibo(twos) )
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^