对于较大的 j 在某些情况下函数,下面的哈希函数返回负值。
int hashing::hash(string a)
{
int i = 0;
int hvalue = 0;
int h =0 ;
while(a[i]!=NULL)
{
hvalue = hvalue + (int(a[i]))*pow(31,i);
i++;
}
h = hvalue%j;
return h;
}
这怎么可能?我该如何纠正?
在上面的代码中,j 是使用文件大小计算的素数。负值出现在字符串具有“s”形式的某些特定情况下。
我究竟做错了什么?我该如何解决?