java 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
1 import java.io.*; 2 import java.util.*; 3 4 public class Main{ 5 public static void main(String[] args) throws IOException { 6 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 7 String str=""; 8 while((str = br.readLine()) != null) { 9 System.out.println(iptoLong(str)); 10 long lg = Long.parseLong(br.readLine()); 11 System.out.println(longtoIp(lg)); 12 } 13 } 14 15 public static Long iptoLong (String str) { 16 String[] split = str.split("\\."); //拆分成字符串数组 17 StringBuilder sb = new StringBuilder(); 18 for(int i =0; i<split.length;i++) { //对数组的每个字符串值处理 19 String stmp = Integer.toBinaryString(Integer.parseInt(split[i])); //字符串值转换为数值,然后转换成对应二进制字符串 20 while(stmp.length() <8) { //不足8位的左边补0 21 stmp = "0" + stmp; 22 } 23 sb.append(stmp); //添加到sb中拼接 24 } 25 return Long.parseLong(sb.toString(), 2); //流转换位字符串,然后将二进制转换位long 26 } 27 28 public static String longtoIp(long l) { 29 String num = Long.toBinaryString(l); 30 while(num.length() < 32) { 31 num = "0" + num; 32 } 33 34 String[] ans = new String[4]; 35 for(int i =0; i<4; i++) { 36 String s = num.substring(i*8, i*8+8); 37 s = Integer.toString(Integer.parseInt(s, 2)); //转换为10进制字符串 38 ans[i] = s; 39 } 40 return String.join(".", ans); 41 } 42 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix