我已經嘗試了一個調試器並且抓取並拋出,儘管我承認我對這兩者都不舒服。但我無法在程序中找到Floating Point Exception的原因。奇怪的是它對數字運行完美< = 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;
}
非常感謝。
我看不出有任何浮點或雙精度......哪有浮點異常的問題? – swtdrgn
我完全不知所措。適用於每個數字36以上。我先在Visual Studio上試了一下,然後是Linux,到處都是一樣的。 – Chocolava
這將有助於看到它發生在哪條線上,或更好的是再現問題的最小部分代碼(沒有用戶輸入或循環,只是因子函數,除法和常量)。您可能正在進入由0問題或分區溢出(INT_MIN/-1)劃分的分區,但很難說清楚。 –