Skip to content

Instantly share code, notes, and snippets.

@JJ-Atkinson
Created August 31, 2018 18:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JJ-Atkinson/4d589d33c6aae0adeba0d74defdee0d2 to your computer and use it in GitHub Desktop.
Save JJ-Atkinson/4d589d33c6aae0adeba0d74defdee0d2 to your computer and use it in GitHub Desktop.
Base Conversion
(ns cs101-clojureworkspace.base-conversion
(:require [clojure.string :as str]
[sc.api :as scc]))
(def charset "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")
(defn convertToBase10 [^String number base]
(reduce + (map *
(map (partial str/last-index-of charset) (-> number (str/upper-case) (reverse)))
(iterate (partial * base) 1))))
(defn convertFromBase10 [number base]
(let [place-values (reverse (take-while
(partial >= number)
(iterate (partial * base) 1)))]
(->> place-values
(reduce (fn [[out remainder] place-value]
[(cons (get charset (quot remainder place-value)) out)
(rem remainder place-value)])
[() number])
(first)
(reverse)
(apply str))))
package edu.memphis.cs101.jarrettatkinson;
import java.util.Scanner;
public class BaseConversion {
private static String characterSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static void main(String[] args) throws InterruptedException {
Scanner input = new Scanner(System.in);
System.out.print("\nPlease type your number: ");
String number = input.nextLine();
System.out.print("\nPlease enter your base: ");
int base = input.nextInt();
System.out.print("\nPlease enter your base you want to convert to: ");
int baseTo = input.nextInt();
int base10ans = readToBase10(number,base);
String out = convertNumberToBase(base10ans, baseTo);
System.out.println("\nYour answer: " + out);
}
private static int readToBase10(String number, int base) {
number = number.toUpperCase();
int sum = 0;
for (int i = 0; i < number.length(); i++) {
int charValue = characterSet.indexOf(number.charAt((number.length() - 1) - i));
sum += charValue * Math.pow(base, i);
}
return sum;
}
private static String convertNumberToBase(int number, int base) {
int digitCount = 0;
while (number >= Math.pow(base, digitCount)) digitCount++;
StringBuilder result = new StringBuilder();
int remainingNumber = number;
for (int i = digitCount; i >= 0 && remainingNumber != 0; i--) {
int placeValue = (int)Math.pow(base, i);
int digitValue = remainingNumber / placeValue;
remainingNumber = remainingNumber % placeValue;
result.append(characterSet.charAt(digitValue));
}
return result.toString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment