컴퓨터는 내부적으로 0과 1 두 개의 숫자만을 사용하여 모든 프로그램이 동작된다.
이렇게 두 개의 숫자만으로 이루어진 수를 이진수라 한다.
2진수를 입력받아 10진수로 변환하여 출력하는 프로그램을 작성하시오.
0과 1로만 이루어져 있는 30자리 이하의 2진수를 입력받는다.
입력된 2진수를 10진수로 변환하여 출력한다.
[Copy]
10101 |
[Copy]
21 |
드디어 소수를 넘어 다른 문제로 넘어왔습니다. 이번 문제는 상당히 쉽다라고 생각하고 풀었는데 int형으로 하니 제대로 풀리지 않는군요.
다시보니 30자리까지 숫자가 등장한다고 되어있습니다.
덕분에 다시 힌트를 분석했는데, 결국 문자열을 사용한 것을 제외하면 동일한 코드였네요.
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 |
#include <iostream>
#include <string>
using namespace std;
int B2N(string bin, int len);
int ToInt(char c);
int main(void)
{
string binary;
cin >> binary;
cout << B2N(binary, binary.size()) << endl;
}
// 2진수를 10진수로 변환하는 함수
// 한 자리씩 분리하며 각 자리수가 증가할 때 마다 2배씩을 해준다.
int B2N(string bin, int len)
{
if (len == 0) return 0;
return B2N(bin, len - 1) * 2 + ToInt(bin[len-1]);
}
int ToInt(char c)
{
return c - '0';
}
|
cs |
JUNGOL) 문제은행) 실력키우기) 이진수