반응형
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로 바꾸어서 해줬더니 정상적으로 작동했습니다. 아마 한 칸을 더 더하는 식으로 계산이 되었던 것 같습니다.
반응형
'IT 프로그래밍 > 객체지향프로그래밍' 카테고리의 다른 글
객체지향프로그래밍 그룹 액티비티 5번 문제 해설 (0) | 2024.04.10 |
---|---|
[C++] N개의 정수 중 K와의 차이가 절대값이 작은 정수 출력 프로그램 (0) | 2024.03.10 |
[C++] 1에서 N 사이의 정수들을 모두 종이에 적었을 때 0의 개수 출력 (0) | 2024.03.10 |
명품 C++프로그래밍 11, 12 예제 (0) | 2024.03.06 |
반복문 for과 while 명품 C++프로그래밍 예제9번 (0) | 2024.03.06 |