10진수를 입력받아 2진수로 변환한 후 이 수보다 큰 수 중 가장 작은 수를 구하여라.
단, 주어진 수를 2진수로 변환하였을 때 1의 개수와 구하는 큰 수의 1의 개수는 같아야 한다.
단, 주어진 정수는 1보다 크거나 같고 1000000보다 작거나 같다
예)
입력 : 1
출력 : 2
입력 : 4
출력 : 8
입력 : 78
출력 : 83
Find next biggest binary number. Condition : Number of 1 should be same between input & output.
/* Written by rinehart@naver.com */
/* 2009. 2. 10. */
/* Tested on Windows, Cygwin, gcc */
#include <stdio.h>
int main(void)
{
int v_input = 0;
int v_temp = 0;
int v_output = 0;
int v_nb_of_1_input = 0;
int v_nb_of_1_output = 0;
int i = 0;
// input number
printf ("Input devimal number : ");
scanf("%d", &v_input);
// check input
if (v_input < 1 || v_input > 1000000)
{
printf ("Wrong number.\n");
return -1;
}
//Make binary & count number of 1
v_temp = v_input;
while (v_temp > 0)
{
if (v_temp % 2) //Is ther 1?
v_nb_of_1_input++; //counting
v_temp = v_temp/2;
}
//Find next biggest number : Same number of 1
v_output = v_input +1;
while (v_output < 1000000)
{
v_temp = v_output;
v_nb_of_1_output = 0;
while (v_temp > 0)
{
if (v_temp % 2) //Is ther 1?
v_nb_of_1_output++; //counting
v_temp = v_temp/2;
}
//Are number of 1 values same?
if (v_nb_of_1_input == v_nb_of_1_output)
break; //Exit while loop
v_output++;
}
// print out the result
printf ("Result : %d\n", v_output);
return 0;
}
'ECIM list (Help!)' 카테고리의 다른 글
C언어 재귀함수로 삼각형 그리기 - 재귀함수 연습 (0) | 2015.08.30 |
---|---|
피보나치 수열 비재귀방법으로 풀기 - Fibonacci number without recursion (0) | 2015.08.30 |
배열 구조체를 이용한 성적출력 - 버블소팅 예제 (Bubble soring example) (0) | 2009.02.10 |
배열을 활용한 2의 100승 구하기 Calculate using array. (2 power 100, 2^100) (2) | 2009.02.07 |
씨언어에서 (c++아님) x,y의 좌표가 주어졌을때 각도 구하는 법 (0) | 2008.08.10 |