我在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
  • 现在反转答案,它将变成=> 100010,但这不是正确的答案。

  • 那么,谁能解释我错了吗?

    最佳答案

    '0' + rem没有按照您的想法做:'0'char文字,而remint值。将它们加在一起将产生一个int,它表示'0''1'的ASCII值。

    更多信息:"Convert an int to ASCII character"

    10-01 22:38
    查看更多