题目:
给你一个整数 n
,以二进制字符串的形式返回该整数的 负二进制(base -2
)表示。
注意,除非字符串就是 "0"
,否则返回的字符串中不能含有前导零。
示例 1:
输入:n = 2
输出:"110"
解释:(-2)*2 + (-2)*1 = 2
示例 2:
输入:n = 3
输出:"111"
示例 3:
输入:n = 4
输出:"100"
算法思路: 如果是二进制的转换很简单 例如数组5转换成二进制 则有 5/2=2--1 2/2=1---0 1/2=0---1 把余数倒序输出 结果为101 除以2 余数范围为0,1 代码实现:
string totwo(int n){
int shan=n,yushu,lshan;
string s;
while(shan!=0){
lshan=shan/2;
yushu=shan-2*lshan;
s.append(to_string(yushu)); //把余数添加到string当中去
shan=lshan;
}
reverse(s.begin(),s.end()); //翻转s
return s;
}
同理如果除数为-2时 则余数的范围是 -1,0,1 0和1 都还可以接受但是-1接受不了 所以可以想办法把-1变一下 3/-2=-1---1 余数不为-1可以接受 -1/-2=0---(-1) 余数为-1 接受不了 把商加一 则有 -1/-2=1---1 余数不为-1 可以接受 1/-2=0---1 商为0结束
代码实现:
c++
string baseNeg2(int n) {
int shan=n,yushu; //-1 0 1
string s;
if(n==0)
s="0";
int lshan;
while(shan!=0){
lshan=shan;
shan=shan/(-2);
yushu=lshan-shan*(-2);
if(yushu==-1){
shan++;
yushu=1;
}
s.append(to_string(yushu));
}
reverse(s.begin(),s.end()); //翻转s
return s;
}
java:
public static String baseNeg2(int n) {
if(n==0) return "0";
StringBuilder sb = new StringBuilder();
int yushu,shang;
while(n!=0){
shang = n / (-2);
yushu = n - shang * (-2);
if(yushu==-1){
shang=shang+1;
yushu = n - shang * (-2);
}
sb.append(yushu);
n=shang;
}
return sb.reverse().toString();
}
编程小白一个欢迎讨论!!!