DY N DY

실력키우기 이진수(C++) 본문

PARK/ALGORITHM

실력키우기 이진수(C++)

손세지 2016. 4. 5. 00:27

2814 : 이진수

제한시간: 1Sec    메모리제한: 128mb
해결횟수: 443회    시도횟수: 825회   



컴퓨터는 내부적으로 0과 1 두 개의 숫자만을 사용하여 모든 프로그램이 동작된다.
이렇게 두 개의 숫자만으로 이루어진 수를 이진수라 한다.
2진수를 입력받아 10진수로 변환하여 출력하는 프로그램을 작성하시오.

 

0과 1로만 이루어져 있는 30자리 이하의 2진수를 입력받는다.



입력된 2진수를 10진수로 변환하여 출력한다.


 [Copy]
10101
 [Copy]
21


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
31
32
33
34
35
36
37
38
/**************************************************************
    Problem: 2814
    User: a132034
    Language: C++
    Result: Success
    Time:0 ms
    Memory:1740 kb
****************************************************************/
 
 
#include    <iostream>
using namespace std;
 
int main()
{
    char bi[30];
 
    gets(bi);
 
    int b = 1;
    int res = 0;
 
    int length = 0;
    for (int i = 0; bi[i] != '\0'; ++i)
    {
        length = i;
    }
    for (int i = length; i >= 0; --i)
    {
        if (bi[i] == '1')
            res += b;
        b *= 2;
    }
 
    cout << res;
 
    return 0;
}


이진수를 받아 10진수로 바꾸는 프로그램과 크게 다른 것은 없으나 한가지 다른 점은 

길이가 1~30까지 가변적으로 입력될 수 있다는 것. 

사실 int로 받아서 나눗셈을 이용해서 배열에 넣어도 전혀 상관 없지만, 이렇게 char형에 넣어도 푸는데 지장은 없음.

첫 번째 for문은 받은 배열의 길이를 측정하기 위한 것. 

두 번째는 2진수를 10진수로 변환.




'PARK > ALGORITHM' 카테고리의 다른 글

실력키우기 그릇(JAVA)  (0) 2016.04.06
실력키우기 윤년(C)  (0) 2016.04.06
실력키우기 2진수를 10진수로(JAVA)  (0) 2016.04.04
실력키우기 팩토리얼(C++)  (0) 2016.04.02
실력키우기 10진수를 2진수로(JAVA)  (1) 2016.04.01