华为-整数与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);
}
}
}
查看15道真题和解析