Ну, якщо б були доступні тільки маленькі латинські букви, то на твоєму місці я б робив десь так
sum = (sum + (str[i]-'a'+1)*st[i])%mod;
де mod — просто дуже велике просте число(1е9+7 наприклад)
st — масив степенів простого числа за модулем мод(st[0] = 1, st[1] = 43%mod, st[2]=43*43%mod, st[3]=43*43*43%mod, ...)