题目要靠猜系列 对网络号,主机号不了解的同学们整***了 不断测试发现 子网掩码规则 为 第3段随意,第4段0 前两段255
注意点的话就是and运算要补足8位,其他好像没什么了 往往看上去复杂的题目是最简单的,就像这个题目。 感觉好多中等的题比这个难,这题难就难在题目太长了吧。。。
// var a = 10;
// print(a.toString(16));
for(var i = 0;i<1000;i++){
var stopFlag = false;
var zip = readline();
if(!zip){
stopFlag = true;
i = 1000;
}
if(!stopFlag){
var ip1 = readline();
var ip2 = readline();
var arrZip = zip.split(".");
var arrZip1 = ip1.split(".");
var arrZip2 = ip2.split(".");
for(var i = 0;i<4;i++){
if(i!=2 && Number(arrZip[i]) != 255 && Number(arrZip[i]) != 0){
print(1);
stopFlag = true;
i = 4;
}
if(Number(arrZip1[i])< 0 || Number(arrZip1[i])>255 || Number(arrZip2[i])>255 || Number(arrZip2[i])<0){
print(1);
stopFlag = true;
i = 4;
}
}
}
if(!stopFlag){
var arrZipTo2 = to2(arrZip);//二进制的zip 子网掩码
var arrZip1To2 = to2(arrZip1);//二进制的ip1
var arrZip2To2 = to2(arrZip2);
// console.log(getBeforCompare(arrZipTo2,arrZip1To2),"11111");
// console.log(getBeforCompare(arrZipTo2,arrZip2To2),"22222");
if(getBeforCompare(arrZipTo2,arrZip1To2)==getBeforCompare(arrZipTo2,arrZip2To2)){
print(0);
}else{
print(2);
}
}
}
//比较2个数组
function getBeforCompare(arr1,arr2){
var arr = [];
for(var i = 0;i<2;i++){
arr[i] = getAnd(arr1[i],arr2[i]);
// console.log(arr[i]);
}
return arr.join("");
}
//通过ip的数组获取二进制ip数组
function to2(arr){
var arr1 = [];
for(var i = 0;i<arr.length;i++){
var str = Number(arr[i]).toString(2);
// console.log(str,"=========");
arr1.push(str);
}
// console.log(arr1);
return arr1;
}
//获取一段and运算后的二进制结果
function getAnd(arr1,arr2){
var arr = [];
if(arr1.length < 8){
arr1 = getBw(arr1).join("");
}
if(arr2.length < 8){
arr2 = getBw(arr2).join("");;
}
// console.log(arr1,arr2,"------")
for(var i = 0;i<8;i++){
if(arr1[i] == arr2[i]){
arr[i] = 1;
}else{
arr[i] = 0;
}
}
// console.log(arr,"--afterAnd--");
return arr.join("");
}
function getBw(arr){
var len = arr.length;
var arr1 = [];
for(var i = 0;i<8-len;i++){
arr1.push(0);
}
return arr1.concat(arr);
}