题解 | #整数与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.hasNextLine()) { // 注意 while 处理多个 case
            String ip = in.nextLine();
            String num = in.nextLine();
            System.out.println(change(ip));
            System.out.println(change(num));
        }
    }

    public static String change(String s) {
        int n = s.length();
        //0 ip      1 数字
        int type = s.contains(".") ? 0 : 1;
        String res = null;
        if(type == 0) {
            long sum = 0;
            String[] split = s.split("\\.");
            for(int j = 0; j < 4; j++) {
                int cur = Integer.parseInt(split[j]);
                sum += resolve(cur, j);
            }
            res = sum + "";
        } else {
            long cur = Long.parseLong(s);
            res = resolve_(cur);
        }
        return res;
    }

    public static String resolve_(long cur) {
        StringBuffer b = new StringBuffer();
        StringBuffer b2 = new StringBuffer();
        int off = 0;
        int num = 0;
        for(int move = 0; move < 32; move++) {
            long bit = cur % 2;
            if (bit == 1) cur -= 1;
            cur = cur / 2;
            num += (int)Math.pow(2, off) * bit;
            off++;
            if(off % 8 == 0) {
                b2.append(num + ".");
                num = 0;
                off = 0;
            }
        }
        String[] split = b2.toString().split("\\.");
        for(int i = 0; i < 4; i++) {
            b.append(split[3-i] + ".");
        }
        b.deleteCharAt(b.length()-1);
        return b.toString();
    }

    public static long resolve(int cur, int off) {
        int base = (3-off) * 8;
        long sub = 0l;
        for(int move = 0; move < 8; move++) {
            if (cur != 0) {
                if(cur % 2 != 0) {
					sub += (long)Math.pow(2, base);
                    cur -= 1;
                }
            }
            cur /= 2;
            base++;
        }
        return sub;
    }
}

全部评论

相关推荐

28小凳也想实习:项目不用一个业务一个轮子吗,刷牛客好多人说要一业务一轮子
点赞 评论 收藏
分享
02-18 17:30
腾讯_TEG_技术
多刷**&nbsp;背八股&nbsp;刷面经&nbsp;项目话术准备好&nbsp;不会差的!!!后台看到好多小伙伴们都出现其中一个环节的错误,,,可惜了抓紧机会吧&nbsp;有的是hc&nbsp;但缺的就是稍微用心的人
野猪不是猪🐗:多刷星星,背八股背话术,真的能过你们?对一个个没实习过的学生狂问场景题设计题和底层深挖,别以为我不知道一边说缺人还一边各种kpi面
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务