C 递归散列码?

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

这应该返回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

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;
}