leetcode第130周赛——负二进制转换 C++

这篇博客介绍了如何使用C++解决LeetCode周赛中的负二进制转换问题。文章通过示例解释了负二进制的表示,并指出其与正二进制转换的相似之处,特别是关键步骤的调整,即用(n-a)/(-2)替换正二进制中的n/n/2,其中a为n对-2取绝对值的余数。
摘要由CSDN通过智能技术生成

给出数字 N,返回由若干 "0" 和 "1"组成的字符串,该字符串为 N 的负二进制(base -2表示。

除非字符串就是 "0",否则返回的字符串中不能含有前导零。

 

示例 1:

输入:2
输出:"110"
解释:(-2) ^ 2 + (-2) ^ 1 = 2

示例 2:

输入:3
输出:"111"
解释:(-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3

示例 3:

输入:4
输出:"100"
解释:(-2) ^ 2 = 4

 

提示:

  1. 0 <= N <= 10^9

其实负二进制和正二进制求解的过程很相似,无非就是将被除数由2换成了-2,还有最关键的一步,正二进制中的n=n/2换成了n=(n-a)/(-2),其中a代表的是abs(n%(-2))

class Solution {
public:
    string baseNeg2(int N) {
        stack<int> s;
        int n=N;
        string str1;
        if(n==0){
            return "0";
        }
        while(n!=0){
            int a=abs(n%(-2));//abs函数是确保将-1和1都按照1输出
            s.push(a);
            n=(n-a)/(-2);//这一步是最关键的,
        }
        while(!s.empty()){
            str1+=s.top()+'0';
            s.pop();
        }
        return str1;
    }
};

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值