var newPosition = (position - key) % alphabet.Length;
Когда позиция равна 66, клавиша равна 7964 и Alpha.length = 91, newPosition как-то -72, даже если должно быть 19. Почему?
Использование / для модуля
var newPosition = (position - key) / alphabet.Length;
((position - key) % alphabet.Length + alphabet.Length) % alphabet.Length
сделал трюк
Имейте в виду, что% на самом деле не является модулем, его остаток
static decimal modulus(decimal a, decimal b) { return a - b * Math.Floor(a / b); } ... Console.WriteLine( nfmod(66-7964 , 91));
Ouput
19
Полная демонстрация здесь