-2进制转换问题
给定一个数组,可以表示一个数,例如数组A=[0,1,1,0,1],在以-2为基的进制下,可以表示为$ 0*(-2){0}+1*(-2){1}+1*(-2)2+0*(-2)3+1*(-2)^4=18$
现给定一个数组,将其表示的10进制数字,除以2,再取ceil,例如ceil(5.4)=6, ceil(-5.4)=-5;
用java编写程序实现操作后的数组表示:
import java.util.ArrayList;
public class Solution3 {
public int mod(int n, int k)
{
if (n % k < 0)
return n - (n / k + 1) * k;
else
return n % k;
}
public ArrayList<Integer> dec2bi(int N)
{
int n = N;
int flag = 0;
String ans = "";
ArrayList<Integer> arr = new ArrayList<>();
int k = -2;
while (n != 0)
{
char a = (char) (mod(n, k) + 48);
ans = ans + a;
arr.add(mod(n, k));
if (n % k < 0)
n = n / k + 1;
else
n /= k;
}
return arr;
}
public int[] solution(int A[]){
int dec=0;
int dec2=0;
for(int i=0;i<A.length;i++){
dec = dec+A[i]*(int)Math.pow(-2,i);
}
System.out.println(dec);
/*BigInteger bi = new BigInteger(String.valueOf(dec)); //转换成BigInteger类型
return bi.toString(2);*/
dec2 = (int)Math.ceil(dec/2.0);
System.out.println(dec/2.0);
System.out.println(dec2);
ArrayList<Integer> res1 = dec2bi(dec2);
int[] res = new int[res1.size()];
for(int i = 0; i < res1.size(); ++i)
{
res[i] = res1.get(i);
}
return res;
}
public static void main(String[] args) {
int[] A={1,0,0,1,1};
int[] B={1,0,0,1,1,1};
Solution3 test = new Solution3();
// System.out.print(test.solution(A));
// System.out.print(test.solution(B));
for(int i: test.solution(A))
{
System.out.println(i);
}
/*test.binaryToDecimal(9);*/
}
}