Problema con función hash con peso

Iniciado por Josh96, 11 Abril 2015, 03:27 AM

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

Josh96

¿Qué tal? Soy nuevo en esto de la programación y recién inicio con funciones hash, tengo un problema con la función de dispersión con peso, cuando ingreso una cadena con longitud 6 la función genera números negativos y cuando son cadenas de 5 o menos sí funciona correctamente. ¿Qué problema logran identificar?
Código

#define MAX 100
#define PESO 37
void hashcliente(char nombre[]){ //generador de posición con peso hash
int suma=0;
int lugar=0;
int i=0; //posición
int j=0; //potencia
int ascii=0;

j=strlen(nombre)-1; //indica a qué potencia se elevará el peso
while(i<(strlen(nombre))){ //se realiza hasta que la posición del caracter sea igual a la longitud de la cadena, si la cadena=6 i=0 a 5
ascii=(int)nombre[i]; //convierte el caracter a su valor en ascii
suma=suma+(ascii*pow(PESO,j)); //j disminuye mientras i aumenta porque la primera posición se eleva por la longitud-1
i++;
j--;
printf("suma parcial: %d\n", suma);
}
printf("suma total: %d\n", suma);
lugar=suma%MAX;
printf("lugar: %d\n", lugar);
}

T. Collins


Josh96

Cita de: T. Collins en 11 Abril 2015, 03:54 AM
ascii=(int)nombre[i];

Olvidé escribirlo en el código que compartí pero en el compilador sí lo tengo como lo pusiste y me continúa con el erro

T. Collins

Cuando elevas 37 a la 6, excedes de 2147483648 que es el máximo para un signed int por eso sale negativo, tienes que utilizar un tipo de variable más grande para suma.

Josh96

Cita de: T. Collins en 11 Abril 2015, 04:40 AM
Cuando elevas 37 a la 6, excedes de 2147483648 que es el máximo para un signed int por eso sale negativo, tienes que utilizar un tipo de variable más grande para suma.
Tienes razón, gracias.