1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import flanagan.io.KeyboardInput;
- import java.math.BigInteger;
- import java.lang.Math;
- import java.util.ArrayList;
- import java.util.List;
- public class chosen_base_to_chosen_base {
- public static void main(String arg[]) {
- KeyboardInput kb = new KeyboardInput();
- String input_number = kb.readLine("input number =");
- BigInteger input_base = kb.readBigInteger("input base =");
- BigInteger output_base = kb.readBigInteger("output base =");
- BigInteger current_number, decimal_number = BigInteger.ZERO;
- String chartable = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
- /* exit when one of the chosen bases is too big for the chartable */
- if (input_base.compareTo(BigInteger.valueOf(chartable.length())) == 1 ||
- output_base.compareTo(BigInteger.valueOf(chartable.length())) == 1 ) {
- System.out.println("Error: chosen base was out too big in " +
- "respect to the chartable defined by this program");
- System.exit(1);
- }
- /* calc decimal number */
- for (int i = 0; i < input_number.length(); i++) {
- current_number = BigInteger.valueOf(chartable.indexOf(
- input_number.substring(i,i + 1)));
- /* exit when digit is bigger than base allows */
- if (input_base.compareTo(current_number) < 1 ) {
- System.out.println("Error: Nonsensical input. Plase make sure " +
- "not to use digits bigger than the base allows");
- System.exit(1);
- }
- decimal_number = decimal_number.add(current_number.multiply(
- input_base.pow(input_number.length() - i - 1)));
-
- }
- ArrayList<Character> remainders = new ArrayList<Character>();
- String output_number = "";
- /* calculate remainders */
- while(decimal_number.compareTo(BigInteger.ZERO) > 0){
- remainders.add(chartable.charAt(decimal_number.mod(output_base).intValue()));
- decimal_number = decimal_number.divide(output_base);
- }
- /* reverse remainders to get the output number */
- for (int i = 1;i <= remainders.size(); i++){
- output_number += remainders.get(remainders.size()-i);
- }
- System.out.println(output_number);
- System.out.printf("length: %d\n", output_number.length());
- System.exit(0);
- }
- }
|