문제

테케 10, 11번 킹받네..
아무튼 최하위에 있는 0과 그 밑의 1의 자릿수를 구한다. 예를 들어 100011이라면 최하위에 등장하는 0의 자리수는 오른쪽부터 시작할 때 3이다. 그 뒤에 있는 1의 자릿수만큼 1을 shift해준 값을 원래 수에 더해주면 정답이다.

예: 0111 + (1 « 2) = 1011

#include <vector>
using namespace std;

vector<long long> solution(vector<long long> numbers) {
	vector<long long> answer;

	for (long long num : numbers) {
		if (num % 2 == 0) answer.push_back(num + 1);
		else {
			long long tmp = 1;

			while (true) {
				if (!(num & tmp)) break;
				tmp *= 2;
			}

			tmp /= 2;
			answer.push_back(num + (1 << (cnt)));
		}
	}
	return answer;
}