본문 바로가기

ECIM list (Help!)

Find next biggest binary number : 다음으로 큰 2진수 찾기

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;
}