hacer un algoritmo para encontrar los número vampiros
comprendidos en el intervalo [a, b] ingresado por el usuario, un numero vampiro es todo número natural para el cual exista una factorización formada por lo dígitos del propio número. Por ejemplo, el número 126 es un número vampiro ya que lo podemos factorizar así: 126=21*6.
como paso esto a java?
#include <stdio.h>
long num1, num2;
int es_vampiro(long);
int verifica_digitos(long,long,char*);
void main()
{
long numero;
printf("Dame el número -> ");
scanf("%ld", &numero);
if(es_vampiro(numero))
printf("El número %ld es vampiro de los progenitores %ld y %ld!n", numero, num1, num2);
else
printf("El número %ld NO es vampiro!n", numero);
}
int es_vampiro(long num)
{
char numero[100];
long c, d, potencia = 1, ini = 1;
int len;
sprintf(numero, "%ld", num);
len = strlen(numero);
/* Si no tiene longitud par ya no es vampiro */
if(len%2 != 0)
return 0;
for(c = 0; c < len/2; c++)
potencia *= 10;
potencia--;
for(c = 1; c < len/2; c++)
ini *= 10;
/* Buscamos los progenitores del numero */
for(c = ini; c <= potencia; c++)
for(d = ini; d <= potencia; d++)
if(c*d == num && verifica_digitos(c, d, numero))
return 1;
return 0;
}
int verifica_digitos(long n1, long n2, char *res)
{
int digitos_nums[10] = {0}, digitos_res[10] = {0}, c = 0;
char temp[100];
sprintf(temp, "%ld%ld", n1, n2);
while(res[c])
{
/* Vemos cuantas veces se repiten los digitos */
digitos_res[atoi(res[c])]++;
digitos_nums[atoi(temp[c])]++;
c++;
}
/* Si no son los mismos digitos, no es vampiro */
for(c = 0; c < 10; c++)
if(digitos_res[c] != digitos_nums[c])
return 0;
num1 = n1;
num2 = n2;
return 1;
}