Я натолкнулся на следующий код C++ в InterviewBit для десятичного двоичного преобразования, как показано на рисунке ниже.Как работает следующий десятичный код двоичного преобразования?
class Solution{
public:
string findDigitsInBinary(int n){
string ans;
if(n == 0) return "0";
while(n > 0){
int rem = n % 2;
ans.push_back((char)('0' + rem));
n /= 2;
}
reverse(ans.begin(), ans.end());
return ans;
}
};
Я не могу понять, что происходит во втором утверждении цикла while.
ans.push_back((char)('0' + rem));
Это моя интерпретация этого кода.
Предположим, я считать значение п в 5.
Теперь для первой итерации цикла, в то время как 5> 0.
бэр = 5% 2 = 1;
В строке ans «0» + 1 (rem), то есть «01» будет сохранен.
п = 5/2 = 2
Теперь, для второй итерации, 2> 0.
бэр = 2% 2 = 0
ANS = "01" (уже сохранены) + '0' + '0' (бэр) => "0100"
п = 2/2 = 1
В заключительной итерации, 1> 0.
бэр = 1% 2 = 1
ANS = "0100" + '0' + 1 (бэр) => "010001"
п = 1/2 = 0
- Теперь, обратив внимание на ответ, оно станет => 100010, но это неправильный ответ.
Итак, может кто-нибудь объяснить, где я ошибаюсь?
очень хорошо поставленный вопрос. –
с 'rem = n% 2;' поэтому он может быть либо '0', либо' 1', 'ans.push_back()' будет принимать 'char', и с этим символом вы либо добавляете' 0', к нему или '1'. ''0' + 0' дает' '0'' и '' 0 '+ 1' дает' '1''. –