/* Base Conversion Program (bcp) File: bcp.java Author: Algorithm designed by David Cronin in 1982 Version: 2009-Feb-01 Compiling: javac bcp.java NOTE: If you get the error Error: Could not find or load main class... Do the following... 1. Find a JDK version (java -version) 2. Modify the path point to the correct java. ie. set PATH="C:\Program Files (x86)\Java\jdk1.8.0_121\bin";%PATH% Execute the compiled banner.class file. NOTE: The banner.class can run under a jre. To run: java -cp . bcp [number] [oldbase] [newbase] */ import java.io.*; public class bcp { public static void main (String args[]) { String sBaseNumbers = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String sDigit=""; String sConvertedNumber=""; String sMYNUM=""; int iDigits; int iModPtr; int iBaseNumberPtr = 0; int iACTUAL = 0; int iOldBase; int iNewBase; double dToDecimal = 0; if ( args.length != 3 ) { System.out.print(" Number: "); sMYNUM=readLine(); System.out.print("OldBase: "); iOldBase=Integer.parseInt(readLine()); System.out.print("NewBase: "); iNewBase=Integer.parseInt(readLine()); } else { sMYNUM = args [0]; iOldBase = Integer.parseInt(args [1]); iNewBase = Integer.parseInt(args [2]); } sMYNUM = sMYNUM.toUpperCase(); iDigits=sMYNUM.length(); /* Convert the number supplied to decimal. Base-10 */ while ( iDigits > 0 ) { sDigit = sMYNUM.substring(iDigits-1,iDigits); iBaseNumberPtr = sBaseNumbers.indexOf(sDigit); dToDecimal += (double)iBaseNumberPtr * Math.pow((double)iOldBase,(double)(sMYNUM.length()-iDigits)); iDigits--; if ( iBaseNumberPtr > iACTUAL ) { iACTUAL = iBaseNumberPtr; } } /* Optional error trapping */ if ( iACTUAL > iOldBase ) { dToDecimal=0; iACTUAL++; sConvertedNumber = sMYNUM + " is not base " + Integer.toString(iOldBase) + ", however, is a " + Integer.toString(iACTUAL) + " base number."; } if ( iOldBase > sBaseNumbers.length() || iOldBase < 2 ) { dToDecimal = 0; sConvertedNumber += "\nOldBase outside the range of 2 to " + Integer.toString(sBaseNumbers.length()) + "."; } if ( iNewBase > sBaseNumbers.length() || iNewBase < 2 ) { dToDecimal = 0; sConvertedNumber += "\nNewBase outside the range of 2 to " + Integer.toString(sBaseNumbers.length()) + "."; } /* End of optional error trapping */ /* Convert the decimal to the new base */ while ( (int)dToDecimal > 0 ) { iModPtr = (int)(dToDecimal % (double)iNewBase); sConvertedNumber = sBaseNumbers.substring(iModPtr,iModPtr+1) + sConvertedNumber; dToDecimal = dToDecimal / (double)iNewBase ; } /* Present the number in its new base */ System.out.print(sConvertedNumber); } public static String readLine() { String s = ""; try { InputStreamReader converter = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(converter); s = in.readLine(); } catch (Exception e) { System.out.println("Error! Exception: "+e); } return s; } }