Решение задачи "Шифр Юлия" с Mccme

С пояснением   Просмотров: 34


Юлий Цезарь использовал свой способ шифрования текста. Каждая буква заменялась на следующую по алфавиту через K позиций по кругу. Необходимо по заданной шифровке определить исходный текст.


Код

#include <bits/stdc++.h>

using namespace std;

int main()
{
    string s;
    getline(cin, s);
    int k;
    cin >> k;
    while(k--){
        for(int i = 0; i < s.size(); ++i){
            if(s[i] > 'A' && s[i] <=  'Z')
                s[i] = char(int(s[i]) - 1);
            else if(s[i] == 'A')
                s[i] = 'Z';
        }
    }
    cout << s;
    return 0;
}

         

Белов Антон Photo Автор: Белов Антон


Пробегаемся циклом по длине строки. Для каждого символа строки может быть два варианта: 1) если нужно сдвинуть символ еще с конца алфавита (например, B при k=3 нужно двигать еще и от конца) 2) если нужно просто подвинуть символ. Зная, что сдвиг происходит влево (что видно на примере) и что большие латинские буквы в таблице символов ASCII находятся в диапазоне [65..90], сделаем следующее: 1) если код символа минус k больше либо равен 65 (ord(s[i])-k>=65 - то есть не надо двигать с конца), то выводим chr(ord(s[i])-k) (ф-ия chr возвращает символ по коду) 2) в остальных случаях заводим переменную (например, переменную o), в которой будем хранить ord(s[i])-65, а затем выведем на экран chr(90-(k-o)+1).

Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться