有一种创建哈希函数的方法:
private static double GenerateHash(string number)
{
var s = 0d;
for (var i = 1; i <= 20; i++)
s += Math.Pow(300, 20 - i) * number[i - 1];
s %= 1000000000000000;
return s;
}
number[i - 1]
是 ASCII 字符代码
number
总是长于 19 个字符
在这条线s %= 1000000000000000;
s
看起来像这样之前:1.234E+40。
例如,当number = 00000000000000000000
达到字符串s %= 1000000000000000;
s = 5.5975134196655518E+48
.
指数形式对数字很四舍五入,如何让数字写成一个整体?
我尝试使用 ulong 和 long 而不是 double 格式,但由于某种原因,在这两种情况下,差点s
在第一次迭代时为负数,并且在所有后续迭代中它等于 0。我
还制作了与此代码等效的代码python 并且数字在那里完整显示。
def get_hash(number):
n = len(number)
s = 0
for i in range(1, n + 1):
s += (300 ** (n - i)) * ord(number[i - 1])
s %= 1000000000000000
return s
我不精通python,但既然他们这么说
结果会是这样
控制台输出