• Lunes 23 de Diciembre de 2024, 05:05

Autor Tema:  numero vampi en java  (Leído 4493 veces)

maucapu15

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
numero vampi en java
« en: Sábado 8 de Mayo de 2010, 22:31 »
0
hacer un  algoritmo para encontrar los número vampiros   :huh: 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? :oops:
#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;
}