gpt4 book ai didi

c++ - 以下十进制到二进制转换代码是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 20:53:34 25 4
gpt4 key购买 nike

我在 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 文字和 rem 是一个 int 值。将它们相加将得到一个 int,表示 '0''1' 的 ASCII 值。

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

关于c++ - 以下十进制到二进制转换代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com