CS 3343/3341 Introduction to Algorithms |
Number Base Conversion
|
n = 93. Repeatedly divide by 8 and take the remainder. Then repeat with the quotient by 8. Stop at 0 quotient. 93%8 == 5 (remainder) and 93/8 == 11 (quotient) 11%8 == 3 (remainder) and 11/8 == 1 (quotient) 1%8 == 1 (remainder) and 1/8 == 0 (quotient) |
Java | C Language |
---|---|
public void writebase(int n) { while (n > 0) { push(n%8); n = n/8; } while (!empty()) System.out.print(pop()); } | void writebase(int n) { while (n > 0) { push(n%8); n = n/8; } while (!empty()) printf("%i", pop()); } |
Java | C Language |
---|---|
// BaseConvert: convert to base 8 public class BaseConvert { public int[] s = new int[100]; // storage for stack public int top = 0; // points one above top public int pop() { return s[--top]; }//pop, return top public void push(int n) { s[top++] = n; } // push item public boolean empty() { return top == 0; } // empty? public void writebase(int n) { while (n > 0) { push(n%8); n = n/8; } while (!empty()) System.out.print(pop()); } public static void main(String[] args) { int n = 93; BaseConvert baseConvert = new BaseConvert(); baseConvert.writebase(n); System.out.println(" is the value of " + n + " (base 8)"); } } | // baseconvert.c: convert to base 8 #include <stdio.h> int s[100]; // storage for the stack int top = 0; // points one above top int pop() { return s[--top]; }//pop, return top void push(int n) { s[top++] = n; } // push item int empty() { return top == 0; } // empty? void writebase(int n) { while (n > 0) { push(n%8); n = n/8; } while (!empty()) printf("%i", pop()); } int main() { int n = 93; writebase(n); printf(" is the value of %i (base 8)\n", n); } |
Common Output: 135 is the value of 93 (base 8) |
Java | C Language |
---|---|
// BaseConversion.java: convert to base 8 public class BaseConversion { public void writebase(int n) { if (n != 0) { writebase(n/8); System.out.print(n%8); } } public static void main(String[] args) { int n = 93; BaseConversion baseConversion = new BaseConversion(); baseConversion.writebase(n); System.out.println(" is the value of " + n + " (base 8)"); } } | // convert.c: convert to base 8 #include <stdio.h> void writebase(int n) { if (n != 0) { writebase(n/8); printf("%i", n%8); } } int main() { int n = 93; writebase(n); printf(" = %i (base 8)\n", n); } |
Output: 135 is the value of 93 (base 8) | Output: 135 = 93 (base 8) |
BaseConversion, With and Without Recursion (both sides are Java) | |
---|---|
// BaseConversion: convert to base 8 public class BaseConversion { public void writebase(int n) { System.out.println("Enter writebase, n = " + n); if (n != 0) { writebase(n/8); System.out.println("Printing: " + n%8); } System.out.println("Leave writebase, n = " + n); } public static void main(String[] args) { int n = 93; BaseConversion baseConversion = new BaseConversion(); baseConversion.writebase(n); System.out.println(" is the value of " + n + " (base 8)"); } } | // BaseConversion0: convert to base 8, NO RECURSION public class BaseConversion0 { public void writebase0(int n) { System.out.println("Enter writebase0, n = " + n); if (n != 0) { writebase1(n/8); System.out.println("Printing: " + n%8); } System.out.println("Leave writebase0, n = " + n); } public void writebase1(int n) { System.out.println("Enter writebase1, n = " + n); if (n != 0) { writebase2(n/8); System.out.println("Printing: " + n%8); } System.out.println("Leave writebase1, n = " + n); } public void writebase2(int n) { System.out.println("Enter writebase2, n = " + n); if (n != 0) { writebase3(n/8); System.out.println("Printing: " + n%8); } System.out.println("Leave writebase2, n = " + n); } public void writebase3(int n) { System.out.println("Enter writebase3, n = " + n); if (n != 0) { writebase0(9999); // not called System.out.println("Printing: " + n%8); } System.out.println("Leave writebase3, n = " + n); } public static void main(String[] args) { int n = 93; BaseConversion0 baseConversion0 = new BaseConversion0(); baseConversion0.writebase0(93); System.out.println(" is the value of " + n + " (base 8)"); } } |
Output, blue = output of the original program, red = differences from left to right | |
Enter writebase, n = 93 Enter writebase, n = 11 Enter writebase, n = 1 Enter writebase, n = 0 Leave writebase, n = 0 Printing: 1 Leave writebase, n = 1 Printing: 3 Leave writebase, n = 11 Printing: 5 Leave writebase, n = 93 is the value of 93, base 8 | Enter writebase0, n = 93 Enter writebase1, n = 11 Enter writebase2, n = 1 Enter writebase3, n = 0 Leave writebase3, n = 0 Printing: 1 Leave writebase2, n = 1 Printing: 3 Leave writebase1, n = 11 Printing: 5 Leave writebase0, n = 93 is the value of 93, base 8 |