C/C++

C++ ужасное задание, помогите

хоть бы сэмплы написал, пришлось еще шифровщик довеском писать, держи код, что непонятно - спрашивай: https://pastebin.com/33BCZGNp
#include < iostream >
#include < vector >

using namespace std;

using ll = long long;

void cypher(){
ll num,NUM;
cout << "Put a number, which you want to cypher: ";
cin >> num;
NUM = num;
string s_num;
while(num > 0){
ll k = num % 10;
s_num += (k + 7)%10 + '0';
num /= 10;
}
reverse(s_num.begin(),s_num.end());
swap(s_num[0],s_num[2]);
swap(s_num[1],s_num[3]);
cout << "Number before cyphering: " << NUM<< "\nNumber after cyphering: " << stoll(s_num);
}

void decypher(){
ll num,NUM;
cout << "Put a number, which you want to cypher: ";
cin >> num;
NUM = num;
string s = to_string(num),ans,s_num;
while(s_num.length() + s.length() < 4)
s_num += '0';
s_num += s;
swap(s_num[0],s_num[2]);
swap(s_num[1],s_num[3]);
for(auto &i: s_num){
ll k = i - '0';
k - 7 >= 0? ans += (k-7) + '0' : ans += (k+3) + '0';
}
cout << "Number before decyphering: " << NUM << "\nNumber after decyphering: " << stoll(ans);
}

int main() {
string choice;
cout << "What do you want to do with your number? Put CYPHER or DECYPHER\n";
cin >> choice;
while(choice != "CYPHER" && choice != "DECYPHER"){
cout << "Incorrect data. Try again. Put CYPHER ot DECYPHER\n";
cin >> choice;
}
choice == "CYPHER" ? cypher() : decypher();
}
Владислав Киприянов
Владислав Киприянов
8 952
Лучший ответ
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void reverse(char* box, const size_t size) {
auto mid = size >> 1;
auto last = size - 1;
for (auto i = 0U, j = last; i < mid; ++i, --j) {
swap(box[i], box[j]);
}
}
string encode(string& number) {
auto box = number.data();
auto size = number.size();
reverse(box, size);
for (auto i = 0U; i < size; ++i) {
switch (box[i]) {
case '0': box[i] = '7'; break;
case '1': box[i] = '8'; break;
case '2': box[i] = '9'; break;
case '3': box[i] = '0'; break;
case '4': box[i] = '1'; break;
case '5': box[i] = '2'; break;
case '6': box[i] = '3'; break;
case '7': box[i] = '4'; break;
case '8': box[i] = '5'; break;
case '9': box[i] = '6'; break;
default: box[i] = '?';
}
}
return string(box);
}
string decode(string& number) {
auto box = number.data();
auto size = number.size();
reverse(box, size);
for (auto i = 0U; i < size; ++i) {
switch (box[i]) {
case '0': box[i] = '3'; break;
case '1': box[i] = '4'; break;
case '2': box[i] = '5'; break;
case '3': box[i] = '6'; break;
case '4': box[i] = '7'; break;
case '5': box[i] = '8'; break;
case '6': box[i] = '9'; break;
case '7': box[i] = '0'; break;
case '8': box[i] = '1'; break;
case '9': box[i] = '2'; break;
default: box[i] = '?';
}
}
return string(box);
}
bool is_digits(const string& str) {
auto size = str.size();
for (auto i = 0U; i < size; ++i) {
if (!isdigit(str[i])) {
return false;
}
}
return true;
}
vector<string> coding(const vector<string>& box) {
vector<string> tmp = box;
for (auto& item : tmp) {
item = encode(item);
}
return tmp;
}
vector<string> decoding(const vector<string>& box) {
vector<string> tmp = box;
for (auto& item : tmp) {
item = decode(item);
}
return tmp;
}
string input(const size_t length) {
string value;
cin >> value;
return is_digits(value) && value.length() == length? value : ""s;
}
void input(vector<string>& box, const size_t length) {
auto size = box.size();
if (0 == size) {
return;
}
for (auto i = 0U; i < size; ++i) {
auto str = input(length);
if (str.empty()) {
return;
}
box[i] = str;
}
}
void show(const vector<string>& box) {
for (auto& item : box) {
if (item.empty()) {
break;
}
cout << item << ' ';
}
cout.put('\n');
}
int main() {
const auto length = 4U;
vector<string> box(10U);
cout << "Input 10 numbers:\n";
input(box, length);
auto code = coding(box);
show(code);
auto text = decoding(code);
show(text);
system("pause > nul");
}
Юрий Репях
Юрий Репях
66 669
Да не особо ужасное

https://www.ideone.com/pQuErB
Ма
Макс)
84 764
Нее, полегче, чем Энигма, кстати посчитать можно влегкую, нужен математик и он же с программированием, причем ему пох... знать язык, тут математический алгоритм нужен
// изменить 7 на 3 для расшифрования
#define E(I) code [ I ] = (code [ I ] - '0' + 7) % 10 + '0'
char code [ 4 ];
::scanf ("%4c", code);
E (0); E (1); E (2); E (3);
std::swap (code [ 0 ], code [ 2 ]);
std::swap (code [ 1 ], code [ 3 ]);
::printf ("%4c", code);
AZ
Azamat Zharmishev
1 107