Я должен взломать шифр Цезаря. я должен объявить функцию crack : int * int -> int
так, что если (k, c)
имеют тип int
, где k
является расшифрованный текст и c
зашифрованный текст, вызывая crack(k, c)
возвращает ключ (по модулю 10) n
, который необходим для получения c
к k
, Примером может быть, что вызов crack(20458790, 64892134)
вернется 4.Устранить шифр цезаря, используя SML
Если c
не правильно кодирования k
, функция не должна реально работать.
Надеюсь, я здесь достаточно ясен. Я понимаю фактическое назначение здесь (у меня есть k и c, мне нужно n), но я не знаю, как показать это в моем коде.
Я забыл добавить, что, извините. Если второе число (c) не является надлежащим кодированием первого, функция фактически не должна работать. Я попробовал то, что вы предложили, но по какой-то причине он возвращает 6 вместо 4, когда я вводил числа сверху. Любая идея, почему он это сделает? Благодаря! – GeorgeWChubby
Большое вам спасибо! Я думаю, что, наконец, понял. Я просто должен был сказать (c mod 10 - k mod 10) mod 10 вместо этого. Я не уверен, почему, но это работает. – GeorgeWChubby
@George: Ой, да, я переключил имена переменных. Он работает, потому что он просто вычитает последнюю цифру k от последней цифры c. Поэтому, если вы добавите эту разницу в последнюю цифру c, вы получите последнюю цифру k. И то же самое касается любой другой цифры, потому что все цифры имеют одинаковую разницу. – sepp2k