반응형

 

 

<코드>

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

int X, K, now, index;
long long ans;
int x[65], k[65];

int main() 
{
	ios::sync_with_stdio(0); 
	cin.tie(0); 

	cin >> X >> K;

	index = 0;
	while (X >= 1)
	{
		if (X % 2 == 1) x[index] = 1;
		else x[index] = 0;
		X /= 2;
		index++;
	}

	index = 0;
	while (K >= 1)
	{
		if (K % 2 == 1) k[index] = 1;
		else k[index] = 0;
		K /= 2;
		index++;
	}

	for (int i = 0; i < 65; i++)
	{
		if (x[i] == 0)
		{
			if (k[now] == 1) ans += ((long long)1 << i);
			now++;
		}
	}
	cout << ans;
}

 

 

 

<비트 연산을 이용한 숏코딩>

#include<iostream>
#include<algorithm>
using namespace std;

long long X, K, j;
long long ans;

int main() 
{
	cin >> X >> K;

	X = ~X;

	for (int i = 0; i < 64; i++)
	{
		if (((long long)1 << i) & X)
		{
			if (((long long)1 << j) & K)
				ans += ((long long)1 << i);

			j++;
		}
	}

	cout << ans;
}

 

 

 

 

www.acmicpc.net/problem/1322

 

1322번: X와 K

첫째 줄에 X와 K가 주어진다. X와 K는 2,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

반응형

+ Recent posts