牛客 HJ33 整数与IP地址间的转换
Posted 顧棟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客 HJ33 整数与IP地址间的转换相关的知识,希望对你有一定的参考价值。
描述
原理: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
java 实现
package nowcoder.x3x;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author 19057578
* @date 2022/7/27 20:28
*/
public class HJ033
public static void main(String[] args) throws IOException
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line1 = br.readLine();
String line2 = br.readLine();
String[] ips = line1.split("\\\\.");
StringBuilder sb = new StringBuilder();
for (String ip : ips)
StringBuilder temp = new StringBuilder(Integer.toBinaryString(Integer.parseInt(ip)));
int len = temp.length();
// 对长度不足8位的进行前置补0操作
if (len < 8)
for (int j = 0; j < 8 - len; j++)
temp.insert(0, "0");
sb.append(temp);
// 将二进制的转换为十进制的long
System.out.println(Long.parseLong(sb.toString(), 2));
// 转换为二进制
StringBuilder longIp2 = new StringBuilder(Long.toBinaryString(Long.parseLong(line2)));
int l = longIp2.length();
// IP起码需要32位,不足的需要前置补0
if (l < 32)
for (int j = 0; j < 32 - l; j++)
longIp2.insert(0, "0");
;
String ipPart1 = longIp2.substring(0, 8);
String ipPart2 = longIp2.substring(8, 16);
String ipPart3 = longIp2.substring(16, 24);
String ipPart4 = longIp2.substring(24, 32);
// 将2进制转十进制
System.out.println(Integer.parseInt(ipPart1, 2)
+ "." + Integer.parseInt(ipPart2, 2)
+ "." + Integer.parseInt(ipPart3, 2)
+ "." + Integer.parseInt(ipPart4, 2));
以上是关于牛客 HJ33 整数与IP地址间的转换的主要内容,如果未能解决你的问题,请参考以下文章
华为python机试题目:整数与IP地址间的转换图片整理字串的连接最长路径查找提取不重复的整数字符串合并处理字符串最后一个单词的长度删除字符串中出现次数最少的字符