題目描述 子網(wǎng)掩碼是用來判斷任意兩臺計算機的ip地址是否屬于同一子網(wǎng)絡(luò)的根據(jù)。 子網(wǎng)掩碼與IP地址結(jié)構(gòu)相同,是32位二進制數(shù),其中網(wǎng)絡(luò)號部分全為“1”和主機號部分全為“0”。利用子網(wǎng)掩碼可以判斷兩臺主機是否中同一子網(wǎng)中。若兩臺主機的IP地址分別與它們的子網(wǎng)掩碼相“與”后的結(jié)果相同,則說明這兩臺主機在同一子網(wǎng)中。 示例: I P 地址 192.168.0.1 子網(wǎng)掩碼 255.255.255.0 轉(zhuǎn)化為二進制進行運算: I P 地址 11010000.10101000.00000000.00000001 子網(wǎng)掩碼 11111111.11111111.11111111.00000000 AND運算 11000000.10101000.00000000.00000000 轉(zhuǎn)化為十進制后為: 192.168.0.0
I P 地址 192.168.0.254 子網(wǎng)掩碼 255.255.255.0
轉(zhuǎn)化為二進制進行運算: I P 地址 11010000.10101000.00000000.11111110 子網(wǎng)掩碼 11111111.11111111.11111111.00000000 AND運算 11000000.10101000.00000000.00000000 轉(zhuǎn)化為十進制后為: 192.168.0.0 通過以上對兩臺計算機IP地址與子網(wǎng)掩碼的AND運算后,我們可以看到它運算結(jié)果是一樣的。均為192.168.0.0,所以這二臺計算機可視為是同一子網(wǎng)絡(luò)。 /* * 功能: 判斷兩臺計算機IP地址是同一子網(wǎng)絡(luò)。 * 輸入?yún)?shù): String Mask: 子網(wǎng)掩碼,格式:“255.255.255.0”; * String ip1: 計算機1的IP地址,格式:“192.168.0.254”; * String ip2: 計算機2的IP地址,格式:“192.168.0.1”; * * 返回值: 0:IP1與IP2屬于同一子網(wǎng)絡(luò); 1:IP地址或子網(wǎng)掩碼格式非法; 2:IP1與IP2不屬于同一子網(wǎng)絡(luò) */ public int checkNetSegment(String mask, String ip1, String ip2) { /在這里實現(xiàn)功能/ return 0; }
輸入描述: 輸入子網(wǎng)掩碼、兩個ip地址
輸出描述: 得到計算結(jié)果
輸入例子: 255.255.255.0 192.168.224.256 192.168.10.4
輸出例子:(牛客通過,但是華為oj不過) 1
解析:#include <iostream>#include <string>#include <cstring>#include <sstream>using namespace std;int main(){ int a,b,c,d; int ia,ib,ic,id; int ma=0,mb=0,mc=0,md=0; int da1,db1,dc1,dd1; int da2,db2,dc2,dd2; char ch; string str; stringstream ss; while(cin>>str) { ss<<str; ss>>ma>>ch>>mb>>ch>>mc>>ch>>md; ss.clear(); cin>>str; ss<<str; ss>>a>>ch>>b>>ch>>c>>ch>>d; ss.clear(); cin>>str; ss<<str; ss>>ia>>ch>>ib>>ch>>ic>>ch>>id; ss.clear(); if(ma<0||ma>255||mb<0||mb>255||mc<0||mc>255||md<0||md>255||a<0||a>255||b<0||b>255||c<0||c>255||d<0||d>255||ia<0||ia>255||ib<0||ib>255||ic<0||ic>255||id<0||id>255) { cout<<1<<endl; } else if((a&ma)==(ia&ma)&&(b&ma)==(ib&ma)&&(c&ma)==(ic&ma)&&(d&ma)==(id&ma)) cout<<0<<endl; else cout<<2<<endl; } return 0;}新聞熱點
疑難解答