Ou pareil en plus court, parce que quand même, décomposer des multiplications en additions, pour ensuite faire des soustractions, c'est un peu fastidieux...
J'étais tellement content d'avoir un truc qui marche, que je me suis empressé de le couler dans le marbre !
sub hashCode {
my $hash = Math::BigInt->new();
my $MAX_VALUE = Math::BigInt->new('9223372036854775808');
my $MIN_VALUE = Math::BigInt->new('-9223372036854775807');
foreach(split //,shift) {
$hash->bmul(31);
$hash->badd(ord($_));
while ($hash->bcmp($MAX_VALUE)>0) {
$hash->bsub($MAX_VALUE);
$hash->bsub($MAX_VALUE);
}
while ($hash->bcmp($MIN_VALUE)<0) {
$hash->badd($MAX_VALUE);
$hash->badd($MAX_VALUE);
}
[^] # Re: La solution
Posté par mouling . En réponse au message Equivalent en Perl de Hashcode en Java. Évalué à 1.
J'étais tellement content d'avoir un truc qui marche, que je me suis empressé de le couler dans le marbre !
sub hashCode {
my $hash = Math::BigInt->new();
my $MAX_VALUE = Math::BigInt->new('9223372036854775808');
my $MIN_VALUE = Math::BigInt->new('-9223372036854775807');
foreach(split //,shift) {
$hash->bmul(31);
$hash->badd(ord($_));
while ($hash->bcmp($MAX_VALUE)>0) {
$hash->bsub($MAX_VALUE);
$hash->bsub($MAX_VALUE);
}
while ($hash->bcmp($MIN_VALUE)<0) {
$hash->badd($MAX_VALUE);
$hash->badd($MAX_VALUE);
}
}
return $hash->bstr();
}