或许可以把num = num >> 1注释掉 然后把EIGHT_BAG = 8改成4, 把SiX_BAG = 6改成3
还有一些判断我不知道是不是必须的,引用一句名言:I don't know why, but this works!
public class BuySomeOrange {
    private static final int EIGHT_BAG = 8;
    private static final int SiX_BAG = 6;
    //use to identify how many eight and six are we using
    //1 for eight, 0 for six
    private static StringBuilder strBuilder = new StringBuilder("");
    public static void main(String[] args) {
        System.out.println(packOrangeFOrE(14) + "\t" + strBuilder.toString());
    }
    
    public static int packOrangeFOrE(int num) {
        int sixBag, eightBag;
        if(num % 2 != 0 || num <= 0)
            return -1;
//        num = num >> 1;
        //first we would like to use the bigger bag
        if(num % EIGHT_BAG == 0) {
            eightBag = num / EIGHT_BAG;
            zeroOrOnes(eightBag, 0);
            return eightBag;
        }else if(num % SiX_BAG == 0) {
            //we would like to use the bigger bag
            int sixEvenDistribute = num % EIGHT_BAG;
            if(sixEvenDistribute % SiX_BAG == 0) {
                eightBag = num / EIGHT_BAG;
                sixBag = (num % EIGHT_BAG) / SiX_BAG;
                zeroOrOnes(eightBag, sixBag);
                return eightBag + sixBag;
            }
            //if ends here we just use 6 bag
            sixBag = num / SiX_BAG;
            zeroOrOnes(0, sixBag);
            return sixBag;
        }else if(num % EIGHT_BAG % SiX_BAG == 0) {
            eightBag = num / EIGHT_BAG;
            sixBag = (num % EIGHT_BAG) / SiX_BAG;
            zeroOrOnes(eightBag, sixBag);
            return eightBag +sixBag;
        }else {
            return -1;
        }
        
    }
    
    private static void zeroOrOnes(int eightNum, int sixNum) {
        for(int i = 0; i < eightNum; i++)
            strBuilder.append("1");
        for(int i = 0; i < sixNum; i++)
            strBuilder.append("0");
    }
}