IT 프로그래밍/객체지향프로그래밍

[C++] 양의 정수를 이진수로 변환하는 프로그램

기술1 2024. 3. 9. 15:09
반응형

2의 거듭제곱수 V를 구할 때 처음 들었던 생각은 for문을 써야겠다 였습니다. 그 근거는 N이라는 변수가 cin을 통해 입력을 받아 주어졌기 때문에 차례로 v를 통해 올라가면서 작은 경우 출력하도록 해야겠다고 생각했습니다.

#include <iostream>

using namespace std;
int main()
{
	int N;
	cin >> N;

	int v = 1;

	for (int i = 1; pow(2, i) <= N; i++)
	{
		v *= 2;
	}

	while (v > 0)
	{
		if (N >= v)
		{
			cout << "1";
			N -= v;
		}
		else
		{
			cout << "0";
		}
		v /= 2;
	}
	cout << endl;
	
	return 0;
}

이런식으로 코드를 완성했습니다.

물론 while문을 사용해도 될 것 같은데 저는 for문을 사용하고 밑에 부분은 while문을 사용했습니다. while (v > 0) 이후로는 문제에서 제시해준대로 진행을 했으며 관건은 for문의 사용이었습니다. 

 

처음에 for문이 오류가 났는데 int i = 0으로 하니 2의 4승을 출력해야 할 때 2의 5승까지 출력하는 문제가 발생했습니다. 그래서 int i = 1로 바꾸어서 해줬더니 정상적으로 작동했습니다. 아마 한 칸을 더 더하는 식으로 계산이 되었던 것 같습니다. 

 

 

반응형