题目链接如下:
学习了bitset,很强大。我的代码如下:
cpp
#include <cstdio>
#include <string>
#include <vector>
#include <bitset>
// #define debug
int m;
int byte[4], mask[4];
std::vector<std::string> vec;
int main(){
#ifdef debug
freopen("0.txt", "r", stdin);
freopen("1.txt", "w", stdout);
#endif
while(scanf("%d", &m) == 1){
vec.clear();
while(m--){
std::string s;
for(int i = 0; i < 4; ++i){
scanf("%d", &byte[i]);
std::bitset<8> bitset1(byte[i]);
s += bitset1.to_string();
getchar();
}
vec.push_back(s);
}
int k = 32;
for(int i = 0; i < 32; ++i){
for(int j = 1; j < vec.size(); ++j){
if(vec[j][i] != vec[0][i]){
k = i;
i = 32;
break;
}
}
}
for(int i = 0; i < 4; ++i){
byte[i] = 0;
mask[i] = 0;
for(int j = 0; j < 8; ++j){
if(i * 8 + j < k){
byte[i] = 2 * byte[i] + vec[0][i * 8 + j] - '0';
mask[i] = 2 * mask[i] + 1;
} else{
byte[i] = 2 * byte[i];
mask[i] = 2 * mask[i];
}
}
printf("%d%s", byte[i], i == 3 ? "\n" : ".");
}
for(int i = 0; i < 4; ++i){
printf("%d%s", mask[i], i == 3 ? "\n" : ".");
}
}
#ifdef debug
fclose(stdin);
fclose(stdout);
#endif
return 0;
}