正如这个问题的评论中所建议的,我将其用作哈希函数:
atol(phone) % buckets
atol()
但是,我所有的电话号码都得到了相同的结果!我删除了前两位数字(在我的情况下,它们对于所有数字都是相同的)并得到不同的结果(当然检测到碰撞......)。
为什么会这样?
检查这个的输出:
printf("%s %ld %ld %s %ld %d %ld\n", str, atol(str), atol(str) % N,
phone, atol(phone), N, atol(phone) % N);
只是一些例子:
48614858 48614858 58 6948614858 2147483647 200 47
61468264 61468264 64 6961468264 2147483647 200 47
54079694 54079694 94 6954079694 2147483647 200 47
48370923 48370923 123 6948370923 2147483647 200 47
52746354 52746354 154 6952746354 2147483647 200 47
元问题:如果可以建议更好的方法来获得更好的哈希函数,我仍然愿意更改我的代码。
编辑:
strtol()
给出相同的结果。