1.问题:程序可以运行,但运行结果测试用例通过率只有 75% ,问哪里出现了漏洞?
2.题目描述:给定两个 IP 地址和子网掩码判断 IP 是否属于同一网段
输入描述:IP地址 1,IP地址 2,子网掩码,三个字段之间用空格分隔。能够确保输入的 IP 和子网掩码是合法的。
输出描述:先输出 0 或者 1,0 表示不属于同一网段,1 表示属于同一网段。紧接着输出空格,然后在输出第一个 IP 地址与子网掩码二进制按位与之后的 IP。
参考输入1:192.168.1.1 192.168.1.2 255.255.255.0
参考输出1:1 192.168.1.0
参考输入 2:192.168.1.5 192.168.2.1 255.255.255.0
参考输出 2:0 192.168.1.0
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int da1 = 0, db1 = 0, dc1 = 0, dd1 = 0; //地址一字段
int da2 = 0, db2 = 0, dc2 = 0, dd2 = 0; //地址二字段
int ma = 0, mb = 0, mc = 0, md = 0; //子网字段
char ch;
string str;
while(cin >> str)
{
stringstream ss;
ss << str;
ss >> da1 >> ch >> db1 >> ch >> dc1 >> ch >> dd1; //地址 1 输入
ss.clear();
cin >> str;
ss << str;
ss >> da2 >> ch >> db2 >> ch >> dc2 >> ch >> dd2; //地址 2 输入
ss.clear();
cin >> str;
ss << str;
ss >> ma >>ch >> mb >> ch >> mc >> md; //地址 3 输入
ss.clear();
if((da1 & ma) == (da2 & ma) && (db1 & mb) == (db2 & mb) &&
(dc1 & mc) == (dc2 & mc) && (dd1 & md) == (dd2 & md)) //判断是否属于同一网络
{
cout << 1 << ' ' << int(da1 & ma) << '.' << int(db1 & mb) << '.' << int(dc1 & mc) << '.' << int(dd1 &md);
}
else
{
cout << 0 << ' ' << int(da1 & ma) << '.' << int(db1 & mb) << '.' << int(dc1 & mc) << '.' << int(dd1 &md);
}
cout << endl;
da1 = 0, db1 = 0, dc1 = 0, dd1 = 0;
da2 = 0, db2 = 0, dc2 = 0, dd2 = 0;
ma = 0, mb = 0, mc = 0, md = 0;
}
return 0;
}