> 文章列表 > 力扣 每日一题 1017. 负二进制转换【难度:中等,rating: 1697】(负二进制)

力扣 每日一题 1017. 负二进制转换【难度:中等,rating: 1697】(负二进制)

力扣 每日一题 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)+12n1=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"
*/