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


Posted by 지그프리드 지그프리드

BLOG main image
일상, 프로그래밍, IT 그리고 직장생활, Dive, 여행 by 지그프리드

카테고리

Class List (402)
Studies (30)
Exercise & Quizz (10)
Term Project (0)
ECIM list (Help!) (10)
Issues & News (0)
Gossip about IT & Job (22)
Tools (2)
Think about the Justice (23)
Book Review (170)
조엘 온 소프트웨어(번역) (28)
Diary (87)
Vacations (9)
Clash of clans 클래시 오브.. (11)

글 보관함

달력

«   2019/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
Total : 314,068
Today : 0 Yesterday : 18