kuangbin 數學訓練一 IP Checking

Qyif發表於2020-11-21

題目連結:
傳送門

#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的用法可以參考一下其他大佬的部落格——大佬部落格

相關文章