-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);*/
    }
}