题解 | #整数与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);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String dataStr1 = in.nextLine();
            String [] dataArray1 = dataStr1.split("\\.");
            System.out.println(encode(dataArray1));
            String datStr2 = in.nextLine();
            System.out.println( decode(Long.parseLong(datStr2)));
        }
    }

    public static Long encode(String [] dataArray) {
        StringBuilder sb = new StringBuilder();
        for (String data : dataArray) {
            // 十进制转二进制
            String n = Long.toString(Long.parseLong(data), 2);
            // 判断数量是否小于8.小则补全
            while (n.length() < 8) {
                n = "0" + n;
            }
            sb.append(n);
        }
        // 二进制转十进制
        return Long.parseLong(sb.toString(), 2);
    }

    public static String decode(Long data) {
        // 转化为二进制
        ;
        String dataStr=Long.toString(data,2);
        // 如果不满则进行补齐
        while (dataStr.length()<32) {
            dataStr= "0"+dataStr;
        }
        // 每隔8为进行一次切分
        StringBuilder sb =new StringBuilder();
        while (dataStr.length()>=8) {
            // 截取的第一个数字转化为十进制
            long newNum =Long.parseLong(dataStr.substring(0,8),2);
            sb.append(newNum).append(".");
            dataStr = dataStr.substring(8);
        }
        return sb.substring(0,sb.length()-1).toString();
    }
}

通过Long.parseLong和Long.toString方法可以分别实现十进制转2进制和2进制转十进制。

全部评论

相关推荐

已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
迷茫的大四🐶:价格这么低都能满了?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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