下面的函式給出了不同的結果。它們之間的假設差異是什么導致不同的輸出。例如 n=30 和 k=417219134 分別給出輸出 0 和 1。
功能1(錯誤):
int kthGrammar(int n, int k) {
if (n==1){
return 0;
}
int parent_node = kthGrammar(n-1, ceil(float(k)/2));
int isKodd = k%2;
if (isKodd){
return parent_node;}
else{
return parent_node==0?1:0;}
}
功能 2(右):
int kthGrammar(int n, int k){
if (n==1){
return 0;
}
int isKodd = k%2;
if (isKodd){
return kthGrammar(n-1, (k 1)/2);}
else{
return (kthGrammar(n-1, k/2)==0?1:0);}
}
uj5u.com熱心網友回復:
在int 417219134不能由被完美地表示float。
float f = 417219134;
double d = 417219134;
std::cout << std::fixed
<< f << '\n' // 417219136.000000
<< d << '\n'; // 417219134.000000
這解釋了為什么ceil(float(k)/2)回傳一個與預期時間相差 1 的數字k = 417219134。
我會double在函式中轉換為:
int parent_node = kthGrammar(n-1, ceil(k / 2.));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322670.html
上一篇:使外部變數無法在特定檔案中訪問
