题解 | #整数与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);
        String ip = in.nextLine();
        String number = in.nextLine();
        System.out.println(ip2Num(ip));
        System.out.println(num2Ip(Long.parseLong(number)));
    }

    private static long ip2Num(String ip) {
        String[] split = ip.split("\\.");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            sb.append(num2Str(split[i]));
        }
        return Long.parseLong(sb.toString(), 2);
    }
	
  	// 数值转IP
    private static String num2Ip(long number) {
        String binStr = Long.toBinaryString(number);
	  	// 补齐32位
        StringBuilder complete0 = new StringBuilder();
        if (binStr.length() != 32) {
            for (int i = 0; i < 32 - binStr.length(); i++) {
                complete0.append("0");
            }
        }
        binStr = complete0 + binStr;
	    // 总共也就4个数,都不用去写什么循环
        StringBuilder ip = new StringBuilder();
        ip.append(Integer.parseInt(binStr.substring(0, 8), 2)).append(".");
        ip.append(Integer.parseInt(binStr.substring(8, 16), 2)).append(".");
        ip.append(Integer.parseInt(binStr.substring(16, 24), 2)).append(".");
        ip.append(Integer.parseInt(binStr.substring(24, 32), 2));
        return ip.toString();
    }

    /**
     * 将字符串类型的数字转成2进制并补齐8位
     *
     * @param number
     * @return
     */
    private static String num2Str(String number) {
        String binStr = Integer.toBinaryString(Integer.parseInt(number));
        StringBuilder complete0 = new StringBuilder();
        for (int i = 0; i < 8 - binStr.length(); i++) {
            complete0.append("0");
        }
        return complete0.toString() + binStr;
    }
}

全部评论

相关推荐

LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
06-20 19:40
中原工学院 Java
网络存储:十几天不会让你拉人办卡就结束了吧?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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