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

整数与IP地址间的转换

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

import java.util.Scanner;

import java.util.Stack;

// 注意类名必须为 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

            System.out.println(solution(in.nextLine()));
        }
    }

    private static String solution(String param) {
        if (isIp(param)) {

            String[] ipArray = param.split("\\.");
            StringBuffer sbf = new StringBuffer();

            for (String ip : ipArray) {

                sbf.append(ten2two(ip));
            }
            return two2ten(sbf.toString());
        }

        String twoStr = ten2two(param);
        String[] twoArray = twoStr.split(" ");

        StringBuffer sbf = new StringBuffer();
        for (String two : twoArray) {
            sbf.append(two2ten(two));
            sbf.append(".");
        }
        sbf.deleteCharAt(sbf.length() - 1);
        return sbf.toString();
    }

    private static boolean isIp(String param) {
        if (param.indexOf(".") > 0) {
            return true;
        }
        return false;
    }

    private static String two2ten(String two) {

        long res = 0;
        int length = two.length();
        while (length > 0) {

            char num = two.charAt(length-1);
            if (num == '1') {
                res += Math.pow(2, two.length() - length);
            }
            length--;
        }
        return res + "";
    }

    private static String ten2two(String ten) {

        Stack<String> stack = new Stack<>();
        long a = Long.parseLong(ten);
        while (a > 1) {
            stack.add(a % 2 + "");
            a = a / 2;
        }
        stack.add(a + "");
   
        int pos = stack.size() % 8;
        if (pos != 0) {
            int zeroNum = 8 - pos;
            while (zeroNum > 0) {
                zeroNum--;
                stack.add("0");
            }
        }
        StringBuffer sbf = new StringBuffer();
        int stackSize = stack.size();
    
        int count = 1;
        while (!stack.isEmpty()) {
            sbf.append(stack.pop());

            if (count % 8 == 0) {
                sbf.append(" ");
            }
            count++;
        }
        sbf.deleteCharAt(sbf.length() - 1);
        return sbf.toString();
    }


}

全部评论

相关推荐

群星之怒:1.照片可以换更好一点的,可以适量P图,带一些发型,遮住额头,最好穿的正式一点,可以适当P图。2.内容太少。建议添加的:求职意向(随着投递岗位动态更改);项目经历(内容太少了建议添加一些说明,技术栈:用到了什么技术,还有你是怎么实现的,比如如何确保数据传输稳定的,角色注册用到了什么技术等等。)项目经历是大头,没有实习是硬伤,如果项目经理不突出的话基本很难过简历筛。3.有些内容不必要,比如自我评价,校内实践。如果实践和工作无关千万别写,不如多丰富丰富项目。4.排版建议:建议排版是先基础信息,然后教育背景(要突出和工作相关的课程),然后专业技能(一定要简短,不要长篇大论,写你会什么,会的程度就可以),然后是项目经历(一定要详细,占整个简历一定要超过一半,甚至超过百分之70都可以)。最后如果有一部分空白的话可以填补上校内获得的专业相关的奖项,没有就写点校园经历和自我评价。5.技术一定要够硬,禁得住拷打。还有作息尽量保证正常,不要太焦虑。我24双非本科还是非科班,秋招春招各找了一段实习结果都没有转正,当时都想噶了,最后6月份在校的尾巴也找到一份工作干到现在,找工作有时很看运气的不要急着自我否定。 加油
点赞 评论 收藏
分享
04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务