题解 | #整数与IP地址间的转换#笔记丰富

整数与IP地址间的转换

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

import java.util.*;
import java.lang.*;

/**
    总结:思路没问题,就是不知道具体如何实现
        1、无论是ip转整数还是整数转ip,都要对整数进行Long.parseLong()处理,因为你不知道它有多大。
        2、二进制数转成long,可用方法 Long.parseLong(str,2);  其中参数str必须是字符串。
        3、// 分割,最重要的是用.分割时要用 \\.  \\.会转译成\.  \.就是.
        4、Long转成二进制字符串,可用Long.toBinaryString(num);
        5、8位一取:String s = num2.substring(8 * i, 8 * i + 8);
        6、Integer转String :Integer.toString(num);
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            if (str.contains(".")) {
                System.out.println(ip2num(str));
            } else {
                System.out.println(num2ip(Long.parseLong(str)));
            }
        }
    }

    // 这里的long很重要,因为你不知道输入的数有多大,而Integer.parseLong(str)这种的都是把字符串转成对应的类型
    public static long ip2num(String str) {
        StringBuilder res = new StringBuilder();
            // 分割,最重要的是用.分割时要用 \\.  \\.会转译成\.  \.就是.
            String[] s = str.split("\\.");

            // 转换二进制,补齐八位,追加到res
            for (int i = 0; i < 4; i++) {
                int num = Integer.parseInt(s[i]);
                String num2 = Integer.toBinaryString(num);
                while (num2.length() < 8) {
                    num2 = "0" + num2;
                }
                res.append(num2);
            }
            // 表明把res.toString()这个二进制数转换为Long
            return Long.parseLong(res.toString(), 2);
    }

    public static String num2ip(Long num) {
        // 转成二进制
        String num2 = Long.toBinaryString(num);
        // 补齐32位
        while (num2.length() < 32) {
            num2 = "0" + num2;
        }
        // 分割8位,转成对应的十进制字符串
        String[] ans = new String[4];
        for (int i = 0; i < 4; i++) {
            String s = num2.substring(8 * i, 8 * i + 8);
            s = Integer.toString(Integer.parseInt(s, 2));
            ans[i] = s;
        }
        return String.join(".", ans);
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-16 16:26
我的工资够买几件上千的衣服?是时候反思了
菜鸟CV程序猿:国内这都不是老板,是奴隶主
点赞 评论 收藏
分享
03-21 08:46
已编辑
门头沟学院 C++
只写bug的程序媛:本科能找到好的,真不建议读研,提前占坑比较好,本科找不到好的,也不建议读研,因为两三年之后压力只会更大,唯一的解就是行业好起来
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务