将数字转换为二进制字符串

时间:2016-06-04 06:38:28

标签: c++11

以下是将数字转换为二进制字符串的代码。谁能告诉我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

3 个答案:

答案 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'