convertir numero a cadena alafabetica

Iniciado por birik, 20 Mayo 2013, 12:17 PM

0 Miembros y 1 Visitante están viendo este tema.

birik

Hola a todos!

Me ha surgido la necesidad den mi programa de convertir un numero sea el que sea a una cadena alfabética. es decir
1->a
2->b
.
.
.
555123->asakdads-> o la que le corresponda (he puesto un numero al azar)

Y la verdad es que llevo horas dándole duro a la función y no consigo nada bueno, lo único que e conseguido ahora es que genere bien hasta la ZZ, ya que cuando pasa a AAA solo avanza la primera y última letra, es decir nunca cambia la de en medio, ademas de que nunca pasa de esas 3 letras.

Os pongo lo que tengo por si podéis ayudarme o indicarme un poco por donde tirar

Saludos y gracias

  Private Function prueba(ByVal num As Integer) As String
        Dim listaLetrasArray As String() = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}

        If (num > 25) Then

            Dim numeroentero As Integer = (num \ 26) - 1
            If (numeroentero > 25) Then
                Dim chi As Integer = numeroentero \ 26
                chi = numeroentero / 26
                numeroentero = numeroentero - (26 * (numeroentero \ 26))
                num = num - (26 * ((num \ 26) - 1))
            Else
                num = num - (26 * (num \ 26))
            End If

            Return listaLetrasArray(numeroentero) & prueba(num)
        Else

            Return listaLetrasArray(num)

        End If

    End Function

ABDERRAMAH

¿y si lo analizas cifra por cifra? se me ocurre transformarlo a texto y recorrer cada caracter.

dim strnum as string = cstr(2561)

for each c as char in strnum
' codigo que sustituye el carácter
next


igual simplifica todo un poco.

birik

creo que no valdría, ya que no se puede analizar numero por numero, si no que hay que analizar el numero en si ya que si por ejemplo tenemos el número 26, si lo analizamos carácter a carácter el resultado que daría seria -> BF siendo realmente el valor correspondiente Z.

La cosa esta en que sería convertir el número que tengo, el cual estará en base 10, a base 26, ya que el alfabeto tiene 26 letras, y de ahí sacar las letras que el corresponden.

ABDERRAMAH

creo que la parte conflictiva es esta:
CitarReturn listaLetrasArray(numeroentero) & prueba(num)
yo intentaría hacerlo con un loop, evitando la autollamada.