Por ejemplo, para el caso de los números de 4 dígitos existen 7 números vampiros que se calculan así:
15 x 93 = 1.395
21 x 60 = 1.260
21 x 87 = 1.827
27 x 81 = 2.187
30 x 51 = 1.530
35 x 41 = 1.435
80 x 86 = 6.880
En este programa en JAVA se presenta una aproximación a la generación de números vampiros de 6 dígitos, pero que puede ser fácilmente configurable para generar números vampiros de cualquier tamaño. Para efectos de prueba el programa genera los números en un arreglo de cadenas, solamente por la facilidad de mostrar los factores que lo producen, pero también puede ser modificado para generar solamente los números vampiros en un arreglo o vector de números enteros o enteros grandes:
import java.util.*; public class Vampiros { public static void main(String[] args) { Vector<String> respuesta = generarVampiros(6); System.out.println(respuesta.size()); for(String x: respuesta) { System.out.println(x); } } public static Vector<String> generarVampiros(int digitos) { Vector<Integer> va, vb, vc; Vector<String> respuesta = new Vector<String>(); int numFinal = (int) Math.pow(10,digitos)-1; int numMin = (int) Math.pow(10,digitos/2-1); int numMax = (int) Math.pow(10,digitos/2)-1; for(int a = numMin; a<=numMax; a ) { va = vectorDigitos(a); for(int b = a+1; b<=numMax; b ) { int c = a*b; if(c>numFinal) { b=numFinal; continue; } vb = vectorDigitos(b); vc = vectorDigitos(c); for(int x: va) vb.add(x); Collections.sort(vb); Collections.sort(vc); if(vb.equals(vc)) { respuesta.add(String.format("%,6d x %,6d = %,8d",a,b,c)); } } } return respuesta; } public static Vector<Integer> vectorDigitos(int tmp) { int x=tmp; Vector<Integer> respuesta = new Vector<Integer>(); while(x>=1) { respuesta.add(x % 10); x/=10; } return respuesta; } }
Hola JorgeP
ResponderBorrarExcelentes apuntes sobre programación, tus ejemplos de algoritmos están muy completos y fáciles de entender!!
Yo no consigo entender lo que es un número vampiro ni como se hace y mucho menos entiendo el porqué del algoritmo
ResponderBorrar