题解 | # 整数与IP地址间的转换 #java
整数与IP地址间的转换
http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
各部分直接乘以相应的数量级,感觉完全不需要二进制过渡啊。。根据ip地址展开成二进制的特点,四个部分的权重分别为2^24,2^16,2^8,2^0
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String ip = sc.nextLine();
long ipDeci = Long.parseLong(sc.nextLine());
System.out.println(transferToIpDecimal(ip));
System.out.println(transferToIpAddress(ipDeci));
}
}
// ip转成10进制数
public static long transferToIpDecimal(String ip) {
String[] ips = ip.split("\\.");
long res = 0;
for (int i = ips.length - 1, n = 0; i >= 0; i--) {
res += Integer.parseInt(ips[i]) * Math.pow(2, n);
n += 8;
}
return res;
}
// 10进制数转成ip
public static String transferToIpAddress(long ipDeci) {
StringBuilder sb = new StringBuilder();
long ipi = 0;
while (ipDeci > 0) {
ipi = ipDeci % (long) Math.pow(2, 8);
ipDeci = ipDeci / (long) Math.pow(2, 8);
if (sb.length() == 0) {
sb = sb.append(ipi);
} else {
sb = new StringBuilder().append(ipi).append(".").append(sb);
}
}
return sb.toString();
}
}
