华为-整数与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); } } }