Как перевести бинарный код в десятичный?

Рейтинг: 2Ответов: 1Опубликовано: 22.06.2011

Задача:

Дано натуральное число m. Найти такое натуральное n, что двоичная запись n получается из двоичной записи t изменением порядка цифр на обратный (t задано в десятичной системе, и n надо также получить в десятичной системе, например, для t=6 получается n=3).

Суть вот в чем, не знаю, как вернуть полученный обратный код числа в десятичный вид. Пример того, что я уже сделал:

Решено, готовый код, пусть и не самый лучший но все же:

    import java.io.*;

public class Binary {
    public static void main(String args[])throws IOException{
        System.out.println("Введите  число");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        myRev(s);
    }

    public static void myRev (String s){
        try {
            int k = Integer.parseInt(s);
            if(k<0) {System.out.println("Число "+s+" не натуральное"); System.exit(1);}
        }
        catch(Exception e) {
            System.out.println("Число "+s+" не натуральное"); System.exit(1);}

            System.out.print("Число:" + s + "\n");
            int f = Integer.parseInt(s);
            StringBuilder sb = new StringBuilder();
            do {
                sb.append(f % 2);
                f = f / 2;
            } while (f != 0);
            String S = new String (sb.reverse());            
            int result = 0;
            for (int i=0; i<S.length (); i++){
                result += Math.pow(2, i) * (S.charAt(i) == '1'?1:0);
            }

        System.out.println("В 2-ном виде: " + sb + "\n");
        System.out.println("Обратный код: " + sb.reverse());
        System.out.println("Ответ : " + result);
    }   
}

Ответы

▲ 2Принят

Простейший вариант:

public static int bin2dec(String binNumber) {
    int result = 0;

    for (int i = 0; i < binNumber.length(); i++) {
        result += Math.pow(2, i) * (binNumber.charAt(i) == '1' ? 1 : 0);
    }
    return result;
}

Кстати, а самый простой вариант решения всей задачи мог бы быть основан на этом выражении:

new BigInteger(
    new StringBuilder(
        new BigInteger(decString).toString(2)
    ).reverse().toString(), 2
).toString();