Codificar el factorial en Java

/*
 En este programa se leerá un número entero positivo de tipo short por la entrada estándar y se deberá
 dar por la salida estándar en una única línea una cadena que se formará de la siguiente forma:
 1. Primero se calculará el factorial del número de entrada.
 2. A continuación se recorrerá el número factorial tomando una pareja de dígitos comenzando en los dígitos más significativos
 (si queda uno se usará el dígito que queda) por el caracter ASCII asociado al valor del número asociado a ese par de números.
 Si el número formado por los dígitos es menor o igual que 32, el carácter asociado será el carácter tilde '~'
 3. Finalmente se imprimirá la cadena resultante de realizar el paso 2 hasta que no queden dígitos del número factorial
 Ejemplo
 Entrada
 7
 Salida
 2(

 */
public class FactorialALetras {

/**
* @param args
*/
public static void main(String[] args) {
// Se lee el número de entero
java.util.Scanner lee = new java.util.Scanner(System.in);
int num = lee.nextInt();

// Se calcula el factorial
java.math.BigInteger bigNumero = java.math.BigInteger.valueOf(num);
for (--num; num > 0; --num){
bigNumero = bigNumero.multiply(java.math.BigInteger.valueOf(num));
}

//Se convierte el factorial a una cadena y se almacena en una StringBuffer
StringBuffer sb = new StringBuffer(bigNumero.toString());
System.out.println(bigNumero);

// Se recorre la StringBuffer extrayendo 2 números y se convierten a char.
// Cuando falte un sólo número es un caso particular
StringBuffer result = new StringBuffer();//Para almacenar la salida
for (int i=0; i < sb.length(); i=i+2){
String s;
if (sb.length() - i < 2) {
s = sb.substring(i);
} else {
s = sb.substring(i, i+2);
}
int stoi = Integer.parseInt(s);
if (stoi <= 32)
stoi = 126;
char ch = (char)stoi;
result.append(ch);
}

System.out.println(result.toString());
}

}