Это 338-й вопрос о Leetcode, подсчет битов. Думаю, я его закончу. Но эти коды получают ошибку во время выполнения при вводе 5? но почему?Почему это вызвало ошибку во время выполнения, только если ввод 5?
вопрос: Учитывая неотрицательное целое число num. Для каждого числа i в диапазоне 0 ≤ i ≤ num вычисляет число 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