【LeetCode】1017. Convert to Base -2(十进制转换为负整数进制)

【LeetCode】1017. Convert to Base -2(十进制转换为负整数进制)

题目

Given a number N, return a string consisting of "0"s and "1"s that represents its value in base -2 (negative two).

The returned string must have no leading zeroes, unless the string is “0”.

Example 1:

Input: 2
Output: "110"
Explantion: (-2) ^ 2 + (-2) ^ 1 = 2

Example 2:

Input: 3
Output: "111"
Explantion: (-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3

Example 3:

Input: 4
Output: "100"
Explantion: (-2) ^ 2 = 4

Note:

0 <= N <= 10^9

题意

这题就是要将一个10进制数转换成 -2 进制数。

思路

对于将 10 进制转换为 - N 进制(N为正整数)的题,可以采用如下方法:

// 将十进制整数i转换为 -N 进制(N为正整数)
string baseNegN(int i, int N) {
	vector<int>remainder; // 用来存余数
	string res = "";  // 存储最终结果
	remainder.clear();
	
	int j = i, k;
	while(j != 0) {
		if(j > 0) {
			remainder.push_back(j % (-N));
			j = j / (-N);
		} else if(j == 0) {
			remainder.push_back(0);
			j = j / (-N);
		} else {
			k = j / (-N) + 1; // 因为j/(-N)*(-N)比j大,所以要加1
			remainder.push_back(j - k * (-N));
			j = k;
		}
	}

	for(j=0; j<remainder.size(); ++j) {
		ans.append(1, remainder[j]);
	}
}

代码

class Solution {
public:
    string baseNeg2(int N) {
        if(N == 0) return "0";
        
        vector<int>v;
        int i, j, k;

        v.clear();
        i = N;
        while(i != 0) {
            if(i > 0) {
                v.push_back(i % (-2));
                i = i / (-2);
            } else {
                if(i % (-2) == 0) {
                    i = i / (-2);
                    v.push_back(0);
                } else {
                    j = i / (-2) + 1;
                    v.push_back(i - j * (-2));
                    i = j;
                }
            }
        }
        string ans = "";
        for(i=v.size()-1; i>=0; --i) {
            ans.append(1, v[i]+'0');
        }
        return ans;
    }
};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值