华为-整数与IP地址间的转换

(java实现)


题目描述:

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。

输入描述:

输入 
1 输入IP地址
2 输入10进制型的IP地址

输出描述:

输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址
示例1:

输入

10.0.3.193
167969729

输出

167773121
10.3.3.193

问题分析:

思路一:通过数字之间计算来实现;
思路二:通过移位来实现;

相关知识:


参考代码:

思路一实现:

import java.util.*;
public class Main {

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        while (input.hasNext())
        {
            String str1 = input.nextLine();
            String str2 = input.nextLine();
            //convert IP to an Integer
            String[] res = str1.split("\\.");
            long sum = 0;
            for (int i=0; i<4; i++)
            {
                long tmp = Integer.parseInt(res[i]);
                sum += (int)(Math.pow(256,3-i))*tmp;
            }
            System.out.println(sum);

            //convert an Interger to IP
            long number = Long.parseLong(str2);  //3165757026
            long[] ipNum = new long[4];
            ipNum[3] = number%256;
            number /= 256;
            ipNum[2] = number%256;
            number /= 256;
            ipNum[1] = number%256;
            ipNum[0] = number/256;
            String resstring = ipNum[0] + "." + ipNum[1] + "." + ipNum[2] + "." + ipNum[3];
            System.out.println(resstring);

        }
    }
}

思路二实现:

import java.util.*;
public class Main {

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        while (input.hasNext())
        {
            String line = input.nextLine();
            long a,b,c,d;
            String[] str = line.split("\\.");
            a = Long.parseLong(str[0]);
            b = Long.parseLong(str[1]);
            c = Long.parseLong(str[2]);
            d = Long.parseLong(str[3]);
            long sum = (a<<24)|(b<<16)|(c<<8)|d;
            System.out.println(sum);

            line = input.nextLine();
            sum = Long.parseLong(line);
            a = (sum&0xff000000)>>24;
            b = (sum&0x00ff0000)>>16;
            c = (sum&0x0000ff00)>>8;
            d = (sum&0x000000ff);
            String res = a + "." + b + "." + c +"." +d;
            System.out.println(res);
        }
    }
}
全部评论

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务