0
這是Leetcode,Counting Bits的第338個問題。我認爲我完成了它。 但是,輸入爲5時,這些代碼會得到運行時錯誤?但爲什麼?爲什麼只有輸入爲5時纔會出現運行時錯誤?
問題是: 給定一個非負整數num。對於範圍0≤i≤num中的每個數字i,計算其二進制表示中的1的數目並將它們作爲數組返回。
class Solution {
public:
vector<int> countBits(int num) {
vector<int> binaryone(num+1);
binaryone[0]=0;
if(0==num)
return binaryone;
binaryone[1]=1;
if(1==num)
return binaryone;
int w = 1 ;
int i = 2;
while(i<=num+1)
{
if(i<(pow(2,w-1)+pow(2,w-2)))
{
binaryone[i]=binaryone[i-pow(2,w-2)];
}
else
{
if(i<=(pow(2,w)-1))
{
binaryone[i]=binaryone[i-pow(2,w-2)]+1;
}
else
{
if(i==pow(2,w))
{
w++;
binaryone[i]=binaryone[i-pow(2,w-2)];
}
}
}
i++;
}
return binaryone;
}
};
這聽起來像你可能需要學習如何使用調試器來逐步執行代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
你的電腦肯定是醉了。刪除酒精,然後再試一次 –
[不要使用pow()來計算整數功率](http://stackoverflow.com/questions/25678481/why-pown-2-return-24-when-n-5/25678721#25678721 ) – PaulMcKenzie