Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Base translator
- //Author: Sam Barba
- //Created 12/11/2017
- package baseConverter;
- import java.util.Scanner;
- public class BaseConverter {
- public static String baseConvert(int baseFrom, String number, int baseTo) {
- //converting <number> first to decimal from base <baseFrom>
- double decNum = 0; //doubles are used so big numbers can be processed
- int actualBit = 0;
- for (int i = 0; i < number.length(); i++) {
- char bit = number.charAt(i);
- if ((char) bit >= 65) //if bit is A, B, C etc.
- actualBit = ((int) bit) - 65 + 10; //convert bit to numeric value (A = 10, B = 11...)
- else if (bit > 0)
- actualBit = Character.getNumericValue(bit);
- decNum += Math.pow(baseFrom, (number.length() - i - 1)) * actualBit;
- }
- //converting decimal version to base <baseTo>
- String reverseRemaindersStr = "";
- while (decNum > 0) {
- double remainder = decNum % baseTo;
- if (remainder >= 10)
- reverseRemaindersStr += (char) (65 + (remainder - 10)); //converts remainder to A, B or C etc. if >= 10 (A = 65 in ASCII)
- else
- reverseRemaindersStr += Integer.toString((int) remainder);
- decNum = Math.floor(decNum / baseTo);
- }
- //the remainders string needs to be reversed
- if (reverseRemaindersStr.length() > 0) {
- String remaindersStr = "";
- if (baseTo != 10)
- for (int i = reverseRemaindersStr.length() - 1; i >= 0; i--)
- remaindersStr += reverseRemaindersStr.charAt(i);
- else { //add commas to separate it into groups of 3 digits (only in base 10)
- for (int i = reverseRemaindersStr.length() - 1; i >= 0; i--) {
- remaindersStr += reverseRemaindersStr.charAt(i);
- if (i % 3 == 0 && i > 0)
- remaindersStr += ",";
- }
- }
- return remaindersStr;
- }
- return "0";
- }
- public static void main(String[] args) {
- Scanner input = new Scanner(System.in);
- char repeat = 'C';
- while (repeat == 'C') {
- System.out.print("Enter the base you're converting from (2 - 36): ");
- int baseFrom = input.nextInt();
- System.out.print("Enter the number in base " + baseFrom + ": ");
- String number = input.next().toUpperCase();
- System.out.print("Enter the base you're converting to (2 - 36): ");
- int baseTo = input.nextInt();
- System.out.println();
- System.out.println(number + " in base " + baseFrom + " = " + baseConvert(baseFrom, number, baseTo) + " in base " + baseTo);
- System.out.println();
- System.out.print("Enter C to continue or another char to exit: ");
- repeat = input.next().toUpperCase().charAt(0);
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement