解题2(IpIsSameSubNet)
题目描述
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
示例:
I P 地址 192.168.0.1
子网掩码 255.255.255.0
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
AND运算
11000000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
I P 地址 192.168.0.254
子网掩码 255.255.255.0
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.11111110
子网掩码 11111111.11111111.11111111.00000000
AND运算
11000000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。
/*
* 功能: 判断两台计算机IP地址是同一子网络。
* 输入参数: String Mask: 子网掩码,格式:“255.255.255.0”;
* String ip1: 计算机1的IP地址,格式:“192.168.0.254”;
* String ip2: 计算机2的IP地址,格式:“192.168.0.1”;
*
* 返回值: 0:IP1与IP2属于同一子网络; 1:IP地址或子网掩码格式非法; 2:IP1与IP2不属于同一子网络
*/
public int checkNetSegment(String mask, String ip1, String ip2)
{
/*在这里实现功能*/
return 0;
}
输入描述:
输入子网掩码、两个ip地址
输出描述:
得到计算结果
输入
255.255.255.0 192.168.224.256 192.168.10.4
输出
1
代码如下:
package com.yzh.hehe; import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class IpIsSameSubNet { public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
String mask,ip1,ip2;
mask=scanner.nextLine();
ip1=scanner.nextLine();
ip2=scanner.nextLine();
scanner.close();
System.out.println(checkNetSegment(mask, ip1, ip2));
} public static int checkNetSegment(String mask, String ip1, String ip2)
{
if (!isSubNetYanMa(mask)||!isIP(ip1)||!isIP(ip2)) {
return ;
}
String yu1=binaryYu(mask,ip1);
String yu2=binaryYu(mask,ip2);
if (!yu1.equals(yu2)) {
return ;
} return ; } private static boolean isIP(String addr) //判断是否是ip
{
if(addr.length() < || addr.length() > || "".equals(addr))
{
return false;
}
/**
* 判断IP格式和范围
*/
String rexp = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"; Pattern pat = Pattern.compile(rexp); Matcher mat = pat.matcher(addr); boolean ipAddress = mat.find(); return ipAddress;
} /*
* 判断是否是子网掩码,方法:先判断是否是ip,再对ip的二进制表示反转,再末位加1,得到的结果是2的n次方就是子网掩码
*/
private static boolean isSubNetYanMa(String code) {
if (!isIP(code)) {
return false;
}
String[] ips = code.split("\\.");
StringBuilder binaryVal = new StringBuilder();
for (int i = ; i < ips.length; i++) //转换成二进制
{
String binaryStr = Integer.toBinaryString(Integer.parseInt(ips[i])); Integer times = - binaryStr.length(); for(int j = ; j < times; j++)
{
binaryStr = "" + binaryStr;
}
binaryVal.append(binaryStr); //+= binaryStr;
} binaryVal.reverse();//反转
for (int i = ; i < binaryVal.length(); i++) {//末位加一
if (binaryVal.charAt(i)=='') { String temp =binaryVal.toString().replace('', '');
binaryVal=new StringBuilder(temp);
binaryVal.replace(i-,i , "");
break;
}
}
int codeNumber= Integer.parseInt(binaryVal.toString(), );//二进制转十进制
if(nCF(codeNumber)){
return true;
}else {
return false;
} } public static boolean nCF(int n){ //判断一个是否是2的n次方
boolean b = false;
while(true){
int j=n%;
n=n/;
if(j==){
b=false;
break;
}
if(n==){
b=true;
break;
}
}
return b;
} private static String binaryYu(String b1,String b2) {//两个ip地址相与
String[] bs1 = b1.split("\\.");
String[] bs2 = b2.split("\\.");
int[] iArr1=new int[];
int[] iArr2=new int[];
StringBuilder stringBuilder=new StringBuilder();
int temp=;
String tempstrString=null;
for (int i = ; i < iArr2.length; i++) {
iArr1[i]=Integer.valueOf(bs1[i]);
iArr2[i]=Integer.valueOf(bs2[i]);
temp=iArr1[i]&iArr2[i];
tempstrString=Integer.toBinaryString(temp);
for (int j = ; j < (-tempstrString.length()); j++) {
stringBuilder.append("");
}
stringBuilder.append(tempstrString);
} return stringBuilder.toString();
}
}
解题2(IpIsSameSubNet)的更多相关文章
- SCNU ACM 2016新生赛决赛 解题报告
新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- HDU 3791二叉搜索树解题(解题报告)
1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- wechall.net/stegano 解题心得
/* 转载请注明出处:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */ 最近迷上了 www.wechall.net 网站,里面都是些 ...
- Mountains(CVTE面试题)解题报告
题目大意: 用一个数组代表群山的高度.高度大的地方代表山峰,小的地方代表山谷.山谷可以容水.假设有一天下了大雨,求群山中总共可以容纳多少水? 如图所示情况,a代表该数组,总共可以容纳5个水. 解题思路 ...
- timus 1180. Stone Game 解题报告
1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. The ...
- timus 1175. Strange Sequence 解题报告
1.题目描述: 1175. Strange Sequence Time limit: 1.0 secondMemory limit: 2 MB You have been asked to disco ...
随机推荐
- Yii实战中8个必备常用的扩展,模块和widget
Yii实战中8个必备常用的扩展,模块和widget 在经过畅K网 的实战后,总结一下在Yii的项目中会经常用到的组件和一些基本的使用方法,分享给大家,同时也给自己留个备忘录,下面我以代码加图片说明. ...
- zookeeper(2) zookeeper的核心原理
zookeeper 的前世今生 分布式系统的很多难题,都是由于缺少协调机制造成的.在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper. Goo ...
- spark 数据读取与保存
spark支持的常见文件格式如下: 文本,json,CSV,SequenceFiles,Protocol buffers,对象文件 1.文本 只需要使用文件路径作为参数调用SparkContext 中 ...
- a标签自执行点击事件
//html <a href='http://www.baidu.com' ><button id='sss'>百度</button></a> //原生 ...
- elasticSearch-header
elasticSearch既有chrome的插件 sense,但是因为chrome作为恶意插件不让植入,因此sense目前还停留在5版本. elasticSearch自带head plugin,用于监 ...
- C++中map用法详解《转》
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作! . map最基本的构造函数: map<string ...
- English-英语学习杂志及资料
[英文原版杂志] >>经济学人 英文原版PDF+双语版+文本音频 超全下载!http://bbs.zhan.com/thread-8443-1-1.html?sid=2004 >&g ...
- 用Hadoop AVRO进行大量小文件的处理(转)
使用 使用使用 使用 HDFS 保存大量小文件的缺点:1.Hadoop NameNode 在内存中保存所有文件的“元信息”数据.据统计,每一个文件需要消耗 NameNode600 字节内存.如果需要保 ...
- mysql主从复制搭建中几种log和pos详解
一.主从原理 Replication 线程 Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql in ...
- Haskell语言学习笔记(70)NonEmpty
NonEmpty(非空列表) infixr 5 :| data NonEmpty a = a :| [a] deriving (Eq, Ord) instance Functor NonEmpty w ...