보통 2진수를 10진수로 변환할 때는 뒤에서부터 앞에서 계산하는 방식을 주로 사용한다.
2진수의 각 자리가 2의 거듭제곱을 의미하기 때문이다.
그래서 보통은 11101의 2진수를 10진수로 변환할 때 각 자리를 해당하는 2의 거듭제곱(2^0, 2^1, 2^2, 2^3, 2^4)으로 곱한 후 더해서 구한다.
이 방법 외에도 더블-더블이라는 방법도 있다.
이 방법은 앞에서부터 시작하여 두 배씩 값을 증가시킨 후 해당하는 2진수 자리를 더하여 2진수를 10진수로 변환하는 방법이다.
그리고 첫 시작 값은 무조건 0으로 시작한다.
예를 들면,
11101 2진수를 더블-더블 방법으로 계산하면
((0 X 2) + 1) X 2 + 1) X 2 + 1 ... 이런식으로 계산하여 구하는 방식이다.
이 방법으로 구하면 비교적 간단한 코드로 2진수를 10진수로 변환할 수 있다.
import java.io.*;
import java.util.*;
import java.util.stream.*;
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static List<Integer> binary = new ArrayList<>();
public static void main(String[] args) throws IOException {
binary = Arrays.stream(br.readLine().trim().split("")).map(Integer::parseInt).collect(Collectors.toCollection(ArrayList::new));
AtomicInteger answer = new AtomicInteger(0);
IntStream.range(0, binary.size()).forEach(index -> {
answer.set(answer.get() * 2 + binary.get(index));
});
System.out.println(answer.get());
br.close();
}
}