以下是将数字转换为二进制字符串的代码。谁能告诉我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;
}
};
是如何运作的?
Maximum function nesting level of '100' reached
答案 0 :(得分:0)
要理解它,您只需知道您也可以对char
变量进行算术运算。因此,下面的简单循环有效并将打印0123456789
。
for(char c = '0'; c <= '9'; ++c)
cout << c;
在您的代码中,rem
为0或1.因此,(char)('0'+rem)
根据需要为'0'
或'1'
,分别对应于rem = 0,1
答案 1 :(得分:0)
while (n > 0) {
int rem = n % 2;
ans.push_back((char)('0' + rem));
n /= 2;
}
专注于这个循环。假设n是5
n > 0 true
所以进入循环。 rem = n % 2
所以rem = 5 % 2 = 1
ans.push_back((char)('0' + rem))
此处('0' + rem)
为(48 + 1)
'0'
的ASCII为48
现在将48 + 1 = 49
转换为'1'
的字符。现在将'1'
推送到ans
,然后将n /= 2
推送到5 /= 2
2
。现在返回并检查while循环中的条件。循环后反转ans
的内容,你有二进制数字n
答案 2 :(得分:0)
首先,您将rem
作为%2。因此,rem的值可以是0或1。
在ans.push_back((char)('0' + rem));
中,您需要将相应的字符添加到字符串中,即0或1.为此,您将'0'视为基本字符,并且只需使用其ASCII int将rem添加到其中。当进行这样的整数运算时,考虑字符'0'的ASCII值,即48。因此,在将rem添加到它之后,它可以是48 + 0 = 48或48 + 1 = 49。
最后,这个值被类型转换回char,其中48为'0',49为'1'