题解 | HJ_33#整数与IP地址间的转换#

整数与IP地址间的转换

https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

import java.util.Arrays;
import java.util.Scanner;
import java.util.Scanner;
import java.util.stream.Collectors;
// 关键在于Long.toBinaryString 和 Long.parseLong(b.toString(), 2)的使用
public class Main {
        public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String ip = in.nextLine();
        Long num = in.nextLong();
        System.out.println(ip2Int(ip));
        System.out.println(int2Ip(num));
    }

    public static Long ip2Int(String ip) {
        String[] nums = ip.split("\\.");
        StringBuilder b = new StringBuilder();
        for (String num : nums) {
            String binaryString = Long.toBinaryString(Long.parseLong(num));
            b.append(appendZero(binaryString));
        }
        return Long.parseLong(b.toString(), 2);
    }

    private static String appendZero(String binaryStr) {
        StringBuilder result = new StringBuilder(binaryStr);
        int len = binaryStr.length();
        if (binaryStr.length() < 8) {
            for (int i = 0; i < 8 - len ; i++) {
                result.insert(0, "0");
            }
        }
        return result.toString();
    }

    public static String int2Ip(Long num) {
        String binaryStr = Long.toBinaryString(num);
        StringBuilder ipStr = new StringBuilder(binaryStr);
        if (binaryStr.length() < 32) {
            for (int i = 0; i < 32 - binaryStr.length(); i++) {
                ipStr.insert(0, "0");//补0
            }
        }
        String[] segments = new String[4];
        int i = 0, j = 0;
        while (i<31) {
            segments[j] = ipStr.substring(i, i + 8);
            i = i + 8;
            j ++;
        }
        return Arrays.stream(segments).map(s -> String.valueOf(Long.parseLong(s, 2))).collect(Collectors.joining("."));
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务