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

整数与IP地址间的转换

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

import java.util.Scanner;

import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String IP = in.nextLine();
        long num = in.nextLong();
        // 注意 hasNext 和 hasNextLine 的区别
        System.out.println(IPToNum(IP));
        System.out.println(NumToIP(num));
        
    }

        private static long IPToNum(String IP){
        String[] list = IP.split("\\.");
        String binary = "";
        for(int i = 0; i < 4; i++){
            String real = Integer.toBinaryString(Integer.parseInt(list[i]));
            for(int j = 0; j < 8 - real.length(); j++){
                binary += "0";
            }
            binary += real;

        }
        return toNum(binary);
    }

    private static String NumToIP(long num){
        String binary = Long.toBinaryString(num);

        List<String> list = new ArrayList<>();
        int length = binary.length();
        for(int i = 0; i < 32 - length; i++){
            binary = "0" + binary;
        }
        for(int count = 0; count < 4; count++){
            String part = "";
            for(int i =0; i < 8; i++){
                part += binary.charAt(i + count * 8);
            }
            list.add(part);
        }
        String result = "";
        result += toNum(list.get(0));
        result += ".";
        result += toNum(list.get(1));
        result += ".";
        result += toNum(list.get(2));
        result += ".";
        result += toNum(list.get(3));

        return result;
    }

    private static long toNum(String binary){
        long num = 0;
        for(int i = 0; i < binary.length(); i++){
            num += (long) ((binary.charAt(i)-48) * Math.pow(2, binary.length()-i-1));
        }
        return num;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务