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

整数与IP地址间的转换

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        while (in.hasNext()) {
            String str = in.next();
            //如果str中包含.
            if (str.contains(".")) {
                c1(str);
            } else {
                c2(str);
            }
        }
    }

    private static void c1(String str) {
        //使用,分割字符串
        String[] strArr = str.split("\\.");
        //将字符串中的数字转换为整数
        long[] longArr = new long[strArr.length];
        for (int i = 0; i < strArr.length; i++) {
            longArr[i] = Integer.parseInt(strArr[i]);
        }
        //依次将数组中的元素转为8位的2进制,并放入StringBuilder中
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < longArr.length; i++) {
            String binaryStr = Long.toBinaryString(longArr[i]);
            //不足8位的在前面补0
            while (binaryStr.length() < 8) {
                binaryStr = "0" + binaryStr;
            }
            sb.append(binaryStr);
        }
        //将最后得到的sb转为10进制
        long result = Long.parseLong(sb.toString(), 2);
        System.out.println(result);
    }

    private static void c2(String str) {
        //将字符串转为整数
        long num = Long.parseLong(str);
        //将整数转为2进制(32位)
        String binaryStr = Long.toBinaryString(num);
        //不足32位的在前面补0
        while (binaryStr.length() < 32) {
            binaryStr = "0" + binaryStr;
        }
        //将32位的二进制字符串分为4组,每组8位
        String[] strArr = new String[4];
        for (int i = 0; i < 4; i++) {
            strArr[i] = binaryStr.substring(i * 8, (i + 1) * 8);
        }
        //将每组的二进制字符串转为整数
        Long[] intArr = new Long[4];
        for (int i = 0; i < 4; i++) {
            intArr[i] = Long.parseLong(strArr[i], 2);
        }
        //将整数转为字符串,并用.连接
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            sb.append(intArr[i]);
            if (i != 3) {
                sb.append(".");
            }
        }
        System.out.println(sb.toString());
    }
}


全部评论

相关推荐

宁波中车时代传感 硬件工程师 总包15W,基本工资8k多一点,15薪
点赞 评论 收藏
分享
点赞 评论 收藏
分享
周述安:这都能聊这么多。别人要是骂我,我就会说你怎么骂人?他要是继续骂我,我就把评论删了。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务