-2进制
问题描述
给出1个十进制整数N,计算出它的-2进制表示。
代码
package 算法训练;
import java.util.Scanner;
public class 负二进制 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long n = in.nextInt();
double x = 0;
int[] a = new int[100];
a[0]=0;
for(int i=1;i<100;i++) {
a[i]=-1;//初始化数组
}
// for(int i=0;i<10;i++) {
// System.out.print(a[i]);
// }
// System.out.println("\n");
int count = 1;
//首位加一
do{
a[0]++;
//改变受a[0]影响得数组
for(int i=0;i<count;i++) {
if(a[i]==2) {//当某一位加上后变为2则进位
if(a[i+1]==-1&&i+1<30) {//3后一位为-1表示当前后一个数没有使用
count++;//开拓下一位
a[i+1]=1;
}else {
a[i+1]++;//如果下一位已经开通,则加一(0+1=1,1+1=2)
}
a[i]=0;//进位后当前位为0
}
}
// for(int i=0;i<count;i++) {
// System.out.print(a[i]);
// }
// System.out.println(",");
//计算每一个负二进制数得和
x=0;
for(int j=0;j<count;j++) {
x += Math.pow(-2, j)*a[j];
}
// System.out.println("x="+(int)x);
}while((int)x!=n);
for(int i=count-1;i>=0;i--) {
System.out.print(a[i]);
}
}
}