C 递归散列码?
这应该返回451845518507当我通过“冰”,但它返回873952427谁能告诉我为什么? (最大长度=501)C 递归散列码?,c,recursion,hash,C,Recursion,Hash,这应该返回451845518507当我通过“冰”,但它返回873952427谁能告诉我为什么? (最大长度=501) unsigned long在您的计算机上仅为32位。451845518507需要更宽的型号吗 451,845,518,507 mod pow(2,32) --> 873,952,427 以下是固定代码: #include <stdio.h> #include <string.h> #define MAX_STR_SIZE 501 unsigne
unsigned long
在您的计算机上仅为32位。451845518507需要更宽的型号吗
451,845,518,507 mod pow(2,32) --> 873,952,427
以下是固定代码:
#include <stdio.h>
#include <string.h>
#define MAX_STR_SIZE 501
unsigned long long hash_code(const char *str){
char temp[MAX_STR_SIZE] = "";
unsigned long long hash;
if(str == NULL || strlen(str) == 0 || *str == '\0'){
return 0;
}
else{
strncpy(temp, str, strlen(str) - 1);
hash = hash_code(temp) * 65599 + str[strlen(str) - 1];
return hash;
}
}
int main(void)
{
char str[] = "ice";
unsigned long long hash;
hash = hash_code(str);
printf("%llu", hash);
return 0;
}
#包括
#包括
#定义最大拉伸尺寸501
无符号长哈希_码(const char*str){
字符温度[最大字符大小]=“”;
无符号长散列;
如果(str==NULL | | strlen(str)==0 | |*str=='\0'){
返回0;
}
否则{
strncpy(temp,str,strlen(str)-1);
hash=hash_码(temp)*65599+str[strlen(str)-1];
返回散列;
}
}
内部主(空)
{
字符str[]=“ice”;
无符号长散列;
哈希=哈希码(str);
printf(“%llu”,散列);
返回0;
}
您需要一个
unsigned long long
来包含451845518507
混合SUCCESS
,哈希值看起来可疑。SUCCESS只是zeroUse*str='\0'
的一个符号,而不是str=''
为什么temp[strlen strlen(str)-1]=0代码>?@Jenny变量名应该有意义
#include <stdio.h>
#include <string.h>
#define MAX_STR_SIZE 501
unsigned long long hash_code(const char *str){
char temp[MAX_STR_SIZE] = "";
unsigned long long hash;
if(str == NULL || strlen(str) == 0 || *str == '\0'){
return 0;
}
else{
strncpy(temp, str, strlen(str) - 1);
hash = hash_code(temp) * 65599 + str[strlen(str) - 1];
return hash;
}
}
int main(void)
{
char str[] = "ice";
unsigned long long hash;
hash = hash_code(str);
printf("%llu", hash);
return 0;
}