您的位置:首页 > 其它

OJ------整数与IP地址间的转换

2016-08-24 14:47 239 查看
描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
 
的每段可以看成是一个0-255的整数,需要对IP地址进行校验
 
 
 

知识点字符串,位运算
运行时间限制10M
内存限制128
输入输入 

1 输入IP地址

2 输入10进制型的IP地址

输出输出

1 输出转换成10进制的IP地址

2 输出转换后的IP地址

样例输入10.0.3.193 167969729
样例输出167773121 10.3.3.193
import java.math.BigInteger;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String s1=sc.next();
String s2=sc.next();
System.out.println(toTen(s1));
System.out.println(toAdr(s2));
}sc.close();
}
private static String toTen(String s){
StringBuffer sb=new StringBuffer();
String[] ss=s.split("\\.");
for(int i=0;i<ss.length;i++){
String sss=Integer.toBinaryString(Integer.parseInt(ss[i]));
if(sss.length()<8){
for(int j=0;j<8-sss.length();j++){sb.append("0");}
}
sb.append(sss);
}
BigInteger big=new BigInteger(sb.toString(),2);
return big.toString(10);
}
private static String toAdr(String s){
String ss=Long.toBinaryString(Long.valueOf(s));
//String ss=Long.valueOf(s).toBinaryString();
StringBuffer sb=new StringBuffer();
if(ss.length()<32){
for(int i=0;i<32-ss.length();i++){
sb.append("0");
}}
sb.append(ss);
StringBuffer sb2=new StringBuffer();
ss=sb.toString();
while(ss.length()!=8){
BigInteger big=new BigInteger(ss.substring(0,8),2);
//int a=Integer.parseInt(ss.substring(0,8));
sb2.append(big.toString(10)+".");

ss=ss.substring(8);
}
BigInteger big=new BigInteger(ss,2);
sb2.append(big.toString(10));

return sb2.toString();}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: