光使用二进制转换还不行,转换过后的整数太大,long型也装不下,手写大整数加法太费时间,使用java大整数类轻松解决
public static BigInteger enCode(String ip) {
        String strs[] = ip.split("\\.");
        BigInteger ips[][] = new BigInteger[4][8];
        for (int i = 0; i < 4; i++) {
            int temp = Integer.valueOf(strs[i]);
            for (int j = 0; j < 8; j++) {
                if ((temp & (1 << j)) == 0)
                    ips[i][j] = new BigInteger("0");
                else ips[i][j] = new BigInteger("1");
            }
        }
        BigInteger bigInteger = new BigInteger("0");

//        long result = 0;
        for (int i = 3, k = 0; i >= 0; i--, k++)
            for (int j = 0; j < 8; j++) {
                bigInteger = bigInteger.add(new BigInteger(String.valueOf(ips[i][j].shiftLeft(j + k * 8))));
            }
        return bigInteger;
    }

    public static String deCode(long value) {
        int[] ips = new int[32];
        for (int i = 0; i < 32; i++) {
            ips[i] = (value & (1 << i)) == 0 ? 0 : 1;
        }
        int ipss[] = new int[4];
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 8; j++) {
                ipss[i] += ips[i * 8 + j] << j;
            }
        }

        List<String> list = new ArrayList<>();
        for (int i = 3; i >= 0; i--) {
            list.add(String.valueOf(ipss[i]));
        }
        return String.join(".", list);
    }

    public static void main(String[] args) {
        Scanner sa = new Scanner(System.in);

        while (sa.hasNext()) {
            String ip = sa.nextLine();
            String intIp = sa.nextLine();
            System.out.println(enCode(ip).toString());
            System.out.println(deCode(Long.valueOf(intIp)));
        }
    }