Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.13 KB | None | 0 0
  1. //Base translator
  2. //Author: Sam Barba
  3. //Created 12/11/2017
  4.  
  5. package baseConverter;
  6. import java.util.Scanner;
  7.  
  8. public class BaseConverter {
  9.     public static String baseConvert(int baseFrom, String number, int baseTo) {
  10.         //converting <number> first to decimal from base <baseFrom>
  11.         double decNum = 0; //doubles are used so big numbers can be processed
  12.         int actualBit = 0;
  13.  
  14.         for (int i = 0; i < number.length(); i++) {
  15.             char bit = number.charAt(i);
  16.            
  17.             if ((char) bit >= 65) //if bit is A, B, C etc.
  18.                 actualBit = ((int) bit) - 65 + 10; //convert bit to numeric value (A = 10, B = 11...)
  19.             else if (bit > 0)
  20.                 actualBit = Character.getNumericValue(bit);
  21.            
  22.             decNum += Math.pow(baseFrom, (number.length() - i - 1)) * actualBit;
  23.         }
  24.  
  25.         //converting decimal version to base <baseTo>
  26.         String reverseRemaindersStr = "";
  27.        
  28.         while (decNum > 0) {
  29.             double remainder = decNum % baseTo;
  30.            
  31.             if (remainder >= 10)
  32.                 reverseRemaindersStr += (char) (65 + (remainder - 10)); //converts remainder to A, B or C etc. if >= 10 (A = 65 in ASCII)
  33.             else
  34.                 reverseRemaindersStr += Integer.toString((int) remainder);
  35.            
  36.             decNum = Math.floor(decNum / baseTo);
  37.         }
  38.  
  39.         //the remainders string needs to be reversed
  40.         if (reverseRemaindersStr.length() > 0) {
  41.             String remaindersStr = "";
  42.             if (baseTo != 10)
  43.                 for (int i = reverseRemaindersStr.length() - 1; i >= 0; i--)
  44.                     remaindersStr += reverseRemaindersStr.charAt(i);
  45.             else { //add commas to separate it into groups of 3 digits (only in base 10)
  46.                 for (int i = reverseRemaindersStr.length() - 1; i >= 0; i--) {
  47.                     remaindersStr += reverseRemaindersStr.charAt(i);
  48.                     if (i % 3 == 0 && i > 0)
  49.                         remaindersStr += ",";
  50.                 }
  51.             }
  52.            
  53.             return remaindersStr;
  54.         }
  55.        
  56.         return "0";
  57.     }
  58.    
  59.     public static void main(String[] args) {
  60.         Scanner input = new Scanner(System.in);
  61.         char repeat = 'C';
  62.        
  63.         while (repeat == 'C') {
  64.             System.out.print("Enter the base you're converting from (2 - 36): ");
  65.             int baseFrom = input.nextInt();
  66.             System.out.print("Enter the number in base " + baseFrom + ": ");
  67.             String number = input.next().toUpperCase();
  68.             System.out.print("Enter the base you're converting to (2 - 36): ");
  69.             int baseTo = input.nextInt();
  70.            
  71.             System.out.println();
  72.             System.out.println(number + " in base " + baseFrom + " = " + baseConvert(baseFrom, number, baseTo) + " in base " + baseTo);
  73.            
  74.             System.out.println();
  75.             System.out.print("Enter C to continue or another char to exit: ");
  76.             repeat = input.next().toUpperCase().charAt(0);
  77.             System.out.println();
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement