子网掩码
Problem G: 子网掩码
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 40 Solved: 23
[Submit][Status][Web Board]
Description
子网掩码计算方法
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。
请看以下示例:
运算演示之一:aa
I P 地址 192.168.0.1
子网掩码 255.255.255.0
AND运算
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
AND运算
11010000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
运算演示之二:
I P 地址 192.168.0.254
子网掩码 255.255.255.0
AND运算
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.11111110
子网掩码 11111111.11111111.11111111.00000000
AND运算
11010000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
运算演示之三:
I P 地址 192.168.0.4
子网掩码 255.255.255.0
AND运算
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.00000100
子网掩码 11111111.11111111.11111111.00000000
AND运算
11010000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
通过以上对三组计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0
所以计算机就会把这三台计算机视为是同一子网络。
Input
第一行是本机IP地址
第二行是子网掩码
第三行整数N,表示后面有N个IP地址
第1个IP地址
......
第N个IP地址
Output
计算并输出N个IP地址是否与本机在同一子网内。
对于在同一子网的输出"INNER"
对于在不同子网的输出“OUTER”
Sample Input
192.168.0.1 255.255.255.0 3 192.168.0.2 192.168.0.254 192.168.1.2
Sample Output
INNER INNER OUTER
#include"stdlib.h"
#include"string.h"
int main()
{
int a[4];
int a1[4];
int a2[4];
int a3[4];
int a4[4];
char aa[100],bb[100],cc[100];
char *p;
int i=0;
scanf("%s",aa);
p=strtok(aa,".");
while(p!=NULL)
{
a[i++]=atoi(p);
p=strtok(NULL,".");
}
i=0;
scanf("%s",bb);
char *p1;
p1=strtok(bb,".");
while(p1!=NULL)
{
a1[i++]=atoi(p1);
p1=strtok(NULL,".");
}
for(i=0;i<4;i++)
a2[i]=a[i]&a1[i];
int t;
scanf("%d",&t);
for(int j=0;j<t;j++)
{
char *p2;
i=0;
scanf("%s",cc);
p2=strtok(cc,".");
while(p2!=NULL)
{
a3[i++]=atoi(p2);
p2=strtok(NULL,".");
}
for(i=0;i<4;i++)
a4[i]=a1[i]&a3[i];
for(i=0;i<4;i++)
if(a2[i]!=a4[i])
{
printf("OUTER\n");
break;
}
if(i==4)
printf("INNER\n");
}
//system("pause");
return 0;
}