力扣 每日一题 1017. 负二进制转换【难度:中等,rating: 1697】(负二进制)
题目链接
https://leetcode.cn/problems/convert-to-base-2
题目来源于:第130场周赛 Q2 rating: 1697
思路
在题解区看到的一个非常优雅的解法。
类似十进制转二进制%2,转负二进制改成%(-2),可能的余数为0,1,-1。想办法把-1给转换掉:余数-1变成+1,然后商+1(显然:−2n−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,-1n/=(-2); // 商if(r==-1){// 保证余数为0,1// 余数-1转为1,商+1r=1;n++;}s+=r+'0';}reverse(s.begin(),s.end());return s.empty()?"0":s;}
};/*
6
"11010"14
"10010"
*/