IP地址转换 | |
描述: | IP地址的长度为32,即有2^32-1个地址。IP地址一般采用点分十进制表示法,例如"192.168.1.1"。IP地址也可以直接用一个32位的整数进行表示。本题目要求根据给定的整数IP地址表示发,将其转换为点分十进制的形式。 举个例子: 输入整数IP地址为 3232235777 其对应十六进制为 0xC0A80101 每字节转为十进制 0xC0=192,0xA8=168,0x01=1,0x01=1 则输出为 192.168.1.1 |
运行时间限制: | 1 Sec |
内存限制: | 100 MByte |
输入: | 32位正整数IP地址 |
输出: | 点分十进制IP地址 |
样例输入: | 3232235777 |
样例输出: | 192.168.1.1 |
答案提示: | 无 |
程序写的有问题,ip对于的整数比较小的适合有错误,100分只得了29分
16777312110.3.3.193 这个就报错 下面程序是严格一位一位的计算,出错了
import java.util.*;public class Main6{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ Long longA = in.nextLong();// String hex = longToHex(longA); String hex = Long.toHexString(longA); hex = hex.toUpperCase(); String ip = hexToIP(hex); System.out.println(ip); } in.close(); } public static String hexToIP(String hex){ StringBuffer sb = new StringBuffer(); int i; String s; for( i=0;i0){ int id = (int)(x%16); //求余数,对于数组id sb.insert(0, a[id]); // 插入到第0个位置 x=x/16; // 更新 }// sb.insert(0, "0x"); return sb.toString(); }}
百度一下
通过位运算比较简单了,但是违背了题意思
public static String bugs(long temp){ long a=((temp&0xff000000)>>24); long b=((temp&0x00ff0000)>>16); long c=((temp&0x0000ff00)>>8); long d=(temp&0x000000ff); return a+"."+b+"."+c+"."+d; }