我在InterviewBit中遇到了以下用于十进制到二进制转换的C ++代码,如下图所示。
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));
以下是我对此代码的解释。
假设我将n的值取为5.
现在,对于while循环的第一次迭代,5> 0
rem = 5%2 = 1;
在ans字符串中,将存储'0'+ 1(rem),即“01”。
n = 5/2 = 2
现在,对于第二次迭代,2> 0
rem = 2%2 = 0
ans =“01”(已存储)+'0'+'0'(rem)=> “0100”
n = 2/2 = 1
在最后的迭代中,1> 0
rem = 1%2 = 1
ans =“0100”+'0'+ 1(rem)=> “010001”
n = 1/2 = 0
那么,任何人都可以解释我错在哪里吗?
答案 0 :(得分:4)
'0' + rem
没有按照您的想法执行:'0'
是char
字面值,rem
是int
值。将它们添加到一起将导致int
表示'0'
或'1'
的ASCII值。