되는대로 살자

[C언어 기출문제&풀이] 1의 위치 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 1의 위치

malu 2010. 11. 2. 17:15
프로그램 명: bit_pos
제한시간: 1 초

양의 정수 n 을 입력으로 받아 이 수를 이진수로 나타내었을 때 1 이 나타나는 위치를 구하는 것이 문제이다.

수를 이진수로 나타내었을 때 가장 오른쪽의 자리를 LSB(Least Significant Bit)라 한다. LSB 를 0 번 위치로 간주한다.

입력

양의 정수 n 이 입력으로 주어진다. ( 1 <= n <= 10^6 )

출력

1 이 나타나는 위치를 모두 출력한다.

입출력 예

입력

13

출력

0 2 3
출처: Central European Programming Contest 

풀이 : 2진수로 나타내는 법은 중학교 1학년 수학 교과서에 나온다. 이것을 참고하여 1의 위치를 알아낸다
소스코드 :
01 #include <stdio.h>
02   
03 int main()
04 {
05      int i,n;
06      scanf("%d",&n);
07      for(i=0;;i++)
08      {
09           if(n%2==1)
10               printf("%d ",i);
11           n/=2;
12           if(n==0)
13     break;
14       }