题目链接
https://leetcode.cn/problems/convert-to-base-2
题目来源于:第130场周赛 Q2 rating: 1697
思路
在题解区看到的一个非常优雅的解法。
类似十进制转二进制%2,转负二进制改成%(-2),可能的余数为0,1,-1。想办法把-1给转换掉:余数-1变成+1,然后商+1(显然: − 2 n − 1 = − 2 ( n + 1 ) + 1 -2n-1 = -2(n+1)+1 −2n−1=−2(n+1)+1)。其他转换规则不变。
代码
class Solution {
public:
string baseNeg2(int n) {
string s;
while(n){
int r=n%(-2); // 余数可能为0,1,-1
n/=(-2); // 商
if(r==-1){
// 保证余数为0,1
// 余数-1转为1,商+1
r=1;
n++;
}
s+=r+'0';
}
reverse(s.begin(),s.end());
return s.empty()?"0":s;
}
};
/*
6
"11010"
14
"10010"
*/