2010-09-19 52 views
2

我應該破解凱撒密碼。 我必須聲明函數crack : int * int -> int因此,如果(k, c)是類型int,其中k是解密文本和c密文,呼籲crack(k, c)將返回鍵(MOD 10)n,這是需要得到ck的。 一個例子是,在調用crack(20458790, 64892134)將返回4.使用SML破解凱撒密碼

如果c不是一個正確的編碼k,功能不必實際工作。

我希望我在這裏已經夠清楚了。我理解這裏的實際任務(我有k和c,我需要n),但我不知道如何在代碼中顯示它。

回答

1

您沒有指定當第二個數字不是第一個數字的凱撒編碼時應該發生什麼,所以我會假設它並不重要。

所以爲了得到,你只需要從第一個數字中取出任何數字(最方便的是最後一個數字),並從第二個數字的相同位置的數字中減去該數字。

換句話說,你可以這樣做:(c mod 10 - k mod 10) mod 10

+0

我忘了補充一點,不好意思。如果第二個數字(c)不是第一個數字的正確編碼,則該函數實際上並不需要工作。我嘗試了你的建議,但出於某種原因,當我輸入上面的數字時,它返回6而不是4。任何想法爲什麼會這樣做?謝謝! – GeorgeWChubby 2010-09-19 10:58:10

+0

非常感謝!我想我終於明白了。我不得不說(mod 10 - k mod 10)mod 10。我不知道爲什麼,但它有效。 – GeorgeWChubby 2010-09-19 11:28:22

+0

@George:哎呀,是的,我打開了變量名稱。它的工作原理是簡單地從c的最後一位減去k的最後一位數字。所以如果你把這個差別加到c的最後一位,你會得到k的最後一位數字。對於其他數字也是如此,因爲所有數字都有相同的差異。 – sepp2k 2010-09-19 11:32:21