kuangbin 数学训练一 IP Checking
题目链接:传送门#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<cmath>#include<bitset>#define ll long longusing namespa
·
题目链接:
传送门
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<bitset>
#define ll long long
using namespace std;
const int N = 5;
int k, t, num[N];
string b[N];
char c;
//判断两个数字的二进制是否相等
bool check(int a, string b) {
bitset<8> bina(a);
bitset<8> binb(b);
//根据每一位进行判断
for(int i = 0; i < 8; i++) if(bina[i] != binb[i]) return 0;
return 1;
}
int main() {
scanf("%d", &t);
while(t--) {
int idx = 0, f = 1;
//根据题目要求输入
scanf("%d.%d.%d.%d", &num[0], &num[1], &num[2], &num[3]);
string tmp = "";
//根据输入把字符串按找'.'经行分割
for(int i = 1; i <= 35; i++) {
cin >> c;
if(c == '.') b[idx++] = tmp, tmp = "";
else tmp += c;
}
b[idx++] = tmp;
//检查每组是否都能符合规定
for(int i = 0; i < 4; i++) {
if(!check(num[i], b[i])) f = 0;
}
//都符合的情况下输出Yes,否则输出No
if(f) printf("Case %d: Yes\n", ++k);
else printf("Case %d: No\n", ++k);
}
}
这道题就是判断两个IP地址是否相等。
我的判断方法是先存下两段IP及其对应位置的值,然后分别把每段对应的IP放进bitset里面。然后比较对应位置的位数是否相等。四个对应位置都比较过了,且都符合的情况下输出Yes,否则输出No。
这里我是用了bitset来判断,关于bitset的用法可以参考一下其他大佬的博客——大佬博客
更多推荐
所有评论(0)