package test;
public class BitAdd {
/**
* 算法,给定一个二进制数n中1所在的位置,求3*n的二进制表达式中1的所在位置
* 例如 50 的二进制位110010 那么这个二进制数1的位置为{1,4,5},50*3=150 求150的二进制数的1所在位置
* 先利用2*n等于n左移以为,计算出2*n,再2*n+n 得出解,解最终打印出来了。关键步骤就是二进制加法。
*/
public static void main(String[] args) {
int[] A={1,4,5};
int[] B={2,3,4,5};
Bit3Times(A);
System.out.println("");
Bit3Times(B);
}
public static void Bit3Times(int[] A){
int[] B=new int[A.length];
int[] C=new int[A.length+1];
for(int i=0;i<A.length;i++){
B[i]=A[i]+1;
C[i]=A[i];
}
for(int i=0;i<C.length;i++){
if(i<B.length){
for(int j=0;j<B.length;j++){
if(C[i]==B[j]){
C[i]=C[i]+1;
break;
}else if(B[j]<C[i+1]&&B[j]>C[i]){
C[B.length+i]=B[j];
}
}
}
}
if(C[B.length-1]==B[B.length-1]){
C[B.length-1]++;
}
int num=0;
for(int i=0;i<C.length;i++){
if(C[i]>0) num++;
System.out.printf("%s,", C[i]);
}
}
}