Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.math.BigInteger;
- import java.util.ArrayList;
- import java.util.LinkedList;
- public class BinaryToDecimalConverter {
- public static void main(String[] args) {
- BinaryToDecimalConverter conv = new BinaryToDecimalConverter();
- conv.go();
- }
- private void go() {
- try {
- String userInput = getInput();
- if (new BigInteger(userInput).compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) {
- BigInteger number = new BigInteger(userInput);
- System.out.println(convertBinaryToDecimalBigInteger(number));
- } else {
- long number = Long.parseLong(userInput);
- System.out.println(convertBinaryToDecimal(number));
- }
- } catch (NullPointerException ex) {
- System.out.println("type a number next time, jackass.");
- }
- }
- /**
- * gives ya a string of the input
- */
- private static String getInput() {
- String inputLine = null;
- try {
- BufferedReader reader = new BufferedReader(
- new InputStreamReader(System.in));
- inputLine = reader.readLine();
- if (inputLine.length() == 0) return null;
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- return inputLine;
- }
- private static long convertBinaryToDecimal(long number) {
- ArrayList<Long> list = new ArrayList<>(); // a list of separate digits of the number being converted
- LinkedList<Long> stack = new LinkedList<>(); // a stack used to put the digits onto the list in the right order after separating them
- while (number > 0) { // get separate digits of the number, put them on a stack
- stack.push(number % 10);
- number = number / 10;
- }
- while (!stack.isEmpty()) { // put digits onto the list in correct order
- list.add(stack.pop());
- }
- long decimalNumber = 0;
- int digits = list.size() - 1;
- for (long item : list) { // converts into decimal using base-q expansion representation of the number
- decimalNumber += item << digits;
- digits--;
- }
- return decimalNumber;
- }
- private static BigInteger convertBinaryToDecimalBigInteger(BigInteger number) {
- ArrayList<BigInteger> list = new ArrayList<>(); // a list of separate digits of the number being converted
- LinkedList<BigInteger> stack = new LinkedList<>(); // a stack used to put the digits onto the list in the right order after separating them
- while (number.compareTo(BigInteger.valueOf(0)) > 0) { // get separate digits of the number, put them on a stack
- stack.push(number.mod(BigInteger.valueOf(10)));
- number = number.divide(BigInteger.valueOf(10));
- }
- while (!stack.isEmpty()) { // put digits onto the list in correct order
- list.add(stack.pop());
- }
- BigInteger decimalNumber = BigInteger.valueOf(0);
- int digits = list.size() - 1;
- BigInteger base = BigInteger.valueOf(2);
- for (BigInteger item : list) { // converts into decimal using base-q expansion representation of the number
- BigInteger powerOfTwo = base.pow(digits);
- decimalNumber = decimalNumber.add(item.multiply(powerOfTwo));
- digits--;
- }
- return decimalNumber;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement