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

整数与IP地址间的转换

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

import java.util.*;
import java.util.regex.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            ip2int(in.nextLine());
        }
    }

    
    /**
     * HJ33 整数与IP地址间的转换
     */
    private static void ip2int(String str) {
        if (!Pattern.matches("^[0-9.]+$", str)) {
            return;
        }
        String[] arr = str.split("\\.");
        if (arr.length == 1) { // 整数转换为ip 1、十进制-》二进制 2、32位按序拆为4组 3、二进制-》十进制并拼接.转换成ip
            String twoRadix = Long.toString(Long.parseLong(str), 2);
            if (twoRadix.length() < 32) {
                twoRadix = getZeroStr(32 - twoRadix.length()) + twoRadix;
            }
            String ip = "";
            for (int i = 0; i < 4; i++) {
                ip = ip + Long.parseLong(twoRadix.substring(i * 8, (i + 1) * 8), 2);
                if (i < 3) {
                    ip = ip + ".";
                }
            }
            System.out.println(ip);
        } else if (arr.length == 4) { // ip转换为整数
            String twoRadix = "";
            for (int i = 0; i < 4; i++) {
                String tmp = Long.toString(Long.parseLong(arr[i]), 2);
                if (tmp.length() < 8) {
                    tmp = getZeroStr(8 - tmp.length()) + tmp;
                }
                twoRadix = twoRadix + tmp;
            }
            System.out.println(Long.parseLong(twoRadix, 2));
        }
    }

    // 补0
    private static String getZeroStr(int num) {
        String s = "";
        for (int i = 0; i < num; i++) {
            s += "0";
        }
        return s;
    }

}

全部评论

相关推荐

2025-12-30 16:42
同济大学 C++
仁狂躁使者:哎呀,不用担心,我当时配环境配了两天,项目捋不清就问问导师能不能用ai,慢慢就清了,会好起来的
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务