import java.util.Scanner; public class CodificaPosizionale { // assumo che la base sia minore o uguale a 36 public static String codifica(int valore, int base) { // divido il numero per la base, prendendo il resto // continuo finche' il quoziente e' > 0 String risultato = ""; do { int resto = valore % base; valore = valore / base; risultato = trasformaInSimbolo(resto) + risultato; } while(valore > 0); return risultato; } /* questo metodo trasforma un valore numerico nel corrispondente simbolo grafico. * I simboli grafici sono le cifre da 0 a 9 e le lettere maiuscole da A a Z, * permettendo quindi di utilizzare il metodo per codifiche * in qualsiasi base tra 1 e 37 */ public static char trasformaInSimbolo(int n) { String sequenzaSimboli = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // devo prendere il carattere in posizione n return sequenzaSimboli.charAt(n); } public static void main(String[] hhh) { Scanner lettore = new Scanner(System.in); int x; do { System.out.print("scrivi un intero positivo in base 10 (-1 per terminare): "); x = lettore.nextInt(); if(x==-1) break; System.out.println(x + " in base 30: " + codifica(x, 30)); // System.out.println("controllo usando il metodo predefinito in Java, base 30: " + Integer.toString(x, 30) ); // stampa la codifica esadecimale di x System.out.println(x + " in base 16: " + codifica(x, 16)); // stampa la codifica esadecimale di x System.out.println(x + " in base 8: "+codifica(x, 8)); // stampa la codifica ottale di x System.out.println(x + " in base 2: "+codifica(x, 2)); // stampa la codifica in base 2 di x } while(true); } }