描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该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.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 a = in.nextLine();
long b = Long.parseLong(in.nextLine());
System.out.println(ipToLong(a));
System.out.println(longToIp(b));
}
}
public static long ipToLong(String ip) {
String[] array = ip.split("\\.");
long sum = (Long.parseLong(array[0])<<24) + (Long.parseLong(array[1])<<16) + (Long.parseLong(array[2])<<8) + (Long.parseLong(array[3]));
return sum;
}
public static String longToIp(long sum) {
long n4 = (sum>>24);
sum -= (n4<<24);
long n3 = (sum)>>16;
sum -= (n3<<16);
long n2 = (sum)>>8;
sum -= (n2<<8);
long n1 = sum;
String ip = "" + n4 + "." + n3 + "." + n2 + "." + n1;
return ip;
}
}