-4

есть код на Python необходимо написать его же на с++, знания в python = 0, а задние необходимо выполнить, к сожалению сроки и занятость не позволят изучить python на нужном уровне. Сложность возникает в переводе самой логики работы кода

            def calc_hash(proc_name):
                result = 0
                for c in proc_name:
                    if ord(c) < ord('A') or ord(c) > ord('Z'):
                        b = ord(c)
                    else:
                        b = ord(c) + 0x20
                    result = (0x19660D * result + b + 0x3C6EF35F) & 0xFFFFFFFF
                return result
        proc_name = (input('input:'))
        hex_out = &quot;&quot;
        hex_out = calc_hash(proc_name)

        print(&quot;IS&quot;, hex_out)

1 Answers1

5
знания в python = 0

данный код:

  1. выводит на экран текст input:
  2. и ждет ввода строки
  3. после чего по строке вычисляется хэш
  4. хэш выводится на экран как is <хэш>

Сам хэш считается по следующему алгоритму:

  1. проходим по всем буквам строки

  2. если буква лежит вне диапазона A..Z, то накапливаем хэш по формуле

     result = (0x19660D * result + (int)c + 0x3C6EF35F) & 0xFFFFFFFF
    
  3. если буква лежит в диапазоне A..Z, то накапливаем хэш по формуле

     result = (0x19660D * result + (int)(c + 0x20) + 0x3C6EF35F) & 0xFFFFFFFF
    

если в c++ знания != 0, то этого должно быть достаточно для перевода кода

P.S.

от себя могу добавить, что если будете работать с unsigned int то делать & 0xFFFFFFFF совершенно бессмысленно - ни на что не влияет

Zhihar
  • 37,513