stremer
(usa Arch Linux)
Enviado em 09/04/2008 - 22:10h
eu faria o seguinte.
Primeiro dividiria o numero em blocos de 3 numeros.
Ai cada bloco de 3 numeros utilizaria uma função para mostrar o número e mais o identificador de acordo com a ordem, no começo nada, depois mil, depois milhão, depois bilhão, etc.
Ai dos 3 números fazia uma regra para o primeiro número de cem (cento, duzentos, trezentos... novecentos) e depois no segundo (dez, vinte, trinta) e depois o número em si.
Poderia fazer uma matriz com os números e a string correspondente para assim ficar mais facil exibir (não precisa encher de if).
Não é dificil não.
Só que agora to sem tempo pra fazer.
Mas seria algo assim (lógica, este codigo nao compila).
// Defina os arrays
char * num[10];
num[0] = "Um";
num[1] = "Dois";
num[2] = "Tres";
//etc
char * seq[6];
seq[0] = "";
seq[1] = "Mil";
seq[2] = "Milhão";
seq[3] = "Milhões];
seq[4] = "Bilhao";
seq[5] = "Bilhões";
char * dez[10];
dez[0] = "";
dez[1] = "Dez";
dez]2] = "Vinte";
dez[3] = "Trinta";
// etc
// Aqui vai ter de dar uma modificada por causa do // cem
char * cent[10];
cent[0] = "Cento";
cent[1] = "Duzentos"
// Numero de 10 posicoes
// Pode utilizar como entrada de dados o argv[1]
char * numero = (char *) malloc(sizeof(char) * 10);
char * numeroTmp = (char *) malloc(sizeof(char) * 3);
strcpy(numero, argv[1]);
int cont = strlen(numero);
int seqCont = 0;
while (cont > 0) {
numeroTmp[0] = numero[cont-3];
numeroTmp[1] = numero[cont-2];
numeroTmp[2] = numero[cont-1];
// Cuidado quando não tiver 3 numeros, implemente melhor
printf("%s e %s e %s %s", cent[numeroTmp[0]], dez[numeroTmp[1]], num[numeroTmp[2]], seq[seqCont]);
// Basicao, cuidado que tem um erro por causa do cem, cento, milhão, milhões, terá aqui de fazer if conforme o número
cont -= 3;
seqCont++;
}
Claro tem varios erros no código, como falei to sem tempo, mas é mais ou menos isso o "caminho das pedras".