Pergunta

Como escrever números por extenso?

Resposta

Primeiramente o número (obtido como uma string) deve ser "desmontado" em diversas substrings onde se separem os dígitos correspondentes a unidade, dezena, centena, milhar etc. Se o número for obtido como inteiro ou real podem ser feitas divisões sucessivas por 10 e truncagens (Math.trunc())para obter-se o mesmo efeito.

Assim:

// valorLido é um objeto tipo String que
// conterá o valor lido
String valorLido = "1234";
// final é uma variável inteira que 
// contêm o comprimento da string valorLido
int final = valorLido.length();
// desmontando a string em dígitos
String unidade = valorLido.substring(final-1, final);
String dezena = valorLido.substring(final-2, final-1);
// convertendo substrings para inteiro:
int valorUnidade = Integer.parseInt(unidade);
int valorDezena = Integer.parseInt(dezena);

Separados e convertidos os dígitos basta escrever o número observando a mesma sequência que utilizaríamos ao ler um número. Para isto usamos vários comandos if ou switch:

String porExtenso = new String("");
switch (milhar) {
  case 1:
    porExtenso += "mil e "; break;
  case 2:
    porExtenso += "dois mil e "; break;
  // e assim por diante
}
switch (centena) {
  case 1:
    porExtenso += "cento e "; break;
  case 2:
    porExtenso += "duzentos e "; break;
    break;
  // e assim por diante
}
// depois para dezenas e unidades

A expressão:

porExtenso += "mil e ";

equivale a:

porExtenso = porExtenso + "mil e ";

e significa a concatenação da string que existe em porExtenso com o novo trecho especificado.