题目链接:
传送门

#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的用法可以参考一下其他大佬的博客——大佬博客

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐