ConvertBase method

From Feliwiki
Jump to: navigation, search
   public static String convertBase(String positiveInteger, String fromBase, String toBase) {
       try {
           BigInteger fromBaseValue = new BigInteger(fromBase.length() + "");
           BigInteger toBaseValue = new BigInteger(toBase.length() + "");

           BigInteger pureNumber = new BigInteger("0");
           int c = 0;

           for (int i = positiveInteger.length() - 1; i >= 0; i--) {
               BigInteger multiplicand = fromBaseValue;
               multiplicand = multiplicand.pow(c++);
               int digitValue = fromBase.indexOf(positiveInteger.charAt(i));
               pureNumber = pureNumber.add(multiplicand.multiply(new BigInteger(digitValue + "")));
           }

           List<Integer> remainders = new ArrayList<Integer>();
           boolean end;

           do {
               BigInteger[] quotientAndRemainder = pureNumber.divideAndRemainder(toBaseValue);
               pureNumber = quotientAndRemainder[0];
               int remainder = quotientAndRemainder[1].intValue();
               remainders.add(remainder);
               end = pureNumber.equals(new BigInteger("0"));
           } while (!end);

           StringBuilder result = new StringBuilder();
           for (int i = remainders.size() - 1; i >= 0; i--) {
               result.append(toBase.charAt(remainders.get(i)));
           }

           return result.toString();
       } catch (Exception e) {
           throw new NumberFormatException("Invalid conversion! number: " + positiveInteger + " from base " + fromBase + " to base " + toBase);
       }
   }
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox