Yosue dijo:
Existen varias formas para obtener un número capicúa, en este espacio desarrollaré una de ellas, utilizando fórmulas matermáticas, conozco otra y otra utilizando funciones de texto, pero esa no la escribiré.
Dado un número natural de más de dos cifras podemos obtener dos números capicúas utilizando sus cifras, uno de cifras pares y otro de cifras pares.
** Visual Basic para Excel por lo fácil del problema **
Primero tenemos que hacer una función recursiva para obtener el número con las cifras invertidas. (Aquí ponemos una pequeña trampita, sumamos 10 a cada dígito para poder extraer los números invertidos cuando contienen la cifra cero.)
Function Inverso(n) As IntegerIf n >= 10 ThenInverso = 10 + (n Mod 10) * (10 ^ (Int(Log(n)))) + Inverso(Int(n / 10))ElseInverso = 10 + nEnd IfEnd Function
Ahora las dos funciones para determinar el capicúa, una Par y otra Impar, porque para cada número n se pueden formar 2 números capicúas con los dígitos que tiene, una con número de cifras Par y otro con número de cifras Impar.
Public Function CapicuaPar(n) As Integer
If n > 0 Then CapicuaPar = n * (10 ^ (Int(Log(n)) + 1)) - (Int(Log(n)) + 1) * 10 + Inverso(n)
Else CapicuaPar = "No existe"End IfEnd Function
Public Function CapicuaImpar(n) As Integerif n>10 then CapicuaImpar = n * (10 ^ (Int(Log(n)))) - (Int(Log(n))) * 10 + Inverso(Int(n / 10))else CapicuaImpar = nend if End Function
Notas:
1-La única dificultad de este procedimiento es que al usar un procedimiento recursivo “Inverso(n)”, la pila tiende a desvordarse en ordenadores con poca potencia.
2-Log(n) significa logaritmo de base 10 de n. Esto se utiliza para determinar la cantidad de dígitos del número.
3-En el caso de cuando n sea de un dígito, la función impar es el mismo n.
Ejemplos.
| n | CapicuaImpar(n) |
CapicuaPar(n) |
|
| 1 | 0 | 0 | No Existe |
| 2 | 1 | 1 | 11 |
| 3 | 5 | 5 | 55 |
| 4 | 10 | 101 | 1001 |
| 5 | 11 | 111 | 1111 |
| 6 | 13 | 131 | 1331 |
| 7 | 20 | 202 | 2002 |
| 8 | 23 | 232 | 2332 |
| 9 | 99 | 999 | 9999 |
| 10 | 100 | 1001 | 100001 |
| 11 | 101 | 10101 | 101101 |
| 12 | 110 | 11011 | 110011 |
| 13 | 999 | 99999 | 999999 |
| 14 | 1000 | 1000001 | 10000001 |
| 15 | 1001 | 1001001 | 10011001 |
| 16 | 1050 | 1050501 | 10500501 |
| 17 | 1100 | 1100011 | 11000011 |
!Qué le aproveche…!



Deja un comentario