Задача
Зашифруйте текст из входного потока, заменяя каждый символ результатом сложения по модулю два его кода и кода предыдущего зашифрованного символа. Первый символ шифруется инверсией бит.
Входные данные
Символьная последовательность.
Выходные данные
Зашифрованная символьная последовательность.
Тесты
Входные данные | Выходные данные |
Where is the table? | a8 c0 a5 d7 b2 92 fb 88 a8 dc b4 d1 f1 85 e4 86 ea 8f b0 |
What a nice day! | a8 c0 a1 d5 f5 94 b4 da b3 d0 b5 95 f1 90 e9 c8 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> int main() { unsigned char x1, x2; scanf("%c", &x1); x1 = ~x1; printf("%x ", x1); while (scanf("%c", &x2)) { if (x2 == '\n') break; x2 = x1 ^ x2; printf("%x ", x2); x1 = x2; } return 0; } |
Решение
Выделяем участки памяти для символьных переменных, считываем первый символ и его инвертируем, затем выводим в шестнадцатеричной системе счисления с пробелом.
Используем цикл «while»: пока считываются данные в переменную x2, XORим предыдущий и новый символы, выводим новый символ и запоминаем новый зашифрованный символ, который становится предыдущим.
Ссылки
Условие задачи
Решение задачи на сайте Ideone.com