输入一个6位数的整数, 表示密码, 对其进行加密;
#include <iostream> #include <cstdio> #include <string> #include <algorithm> using namespace std; string pwd; int SUM, s = 1, t, INDEX, bin[33]; int main(){ cin >> pwd; reverse(pwd.begin(), pwd.end()); for(int i = 0; i < pwd.size(); i++){ t = pwd[i] - '0'; while(t != 0) bin[INDEX++] = t % 2, t /= 2; if(INDEX < 4 * (i + 1)) INDEX = 4 * (i + 1); } for(int i = 0; i < 32; i++) SUM += bin[i] * s, s *= 2; cout << SUM; return 0; }
采用位运算实现加密:
#include <iostream> #include <cstdio> using namespace std; string pwd; int t, SUM; int main(){ cin >> pwd; for(int i = 0; i < pwd.size(); i++) SUM |= ((pwd[i] - '0') << 4 * (5 - i)); cout << SUM; return 0; }
输入一个加密整数加密后的数字, 对其进行解密;
#include <iostream> #include <cstdio> #include <string> #include <algorithm> using namespace std; int n, INDEX, bin[33], t, s = 1; string pwd; int main(){ cin >> n; while(n != 0) bin[INDEX++] = n % 2, n /= 2; for(int i = 0; i < 25; i++){ if(i % 4 == 0 && i != 0) pwd += t + '0', t = 0, s = 1; t += bin[i] * s, s *= 2; } reverse(pwd.begin(), pwd.end()); cout << pwd; return 0; }
采用位运算实现解密
#include <iostream> #include <cstdio> using namespace std; int n, t = 0b00000000111100000000000000000000; int main(){ cin >> n; for(int i = 0; i < 6; i++){ cout << ((t & n) >> ((5 - i) * 4)); t >>= 4; } return 0; }
有话要说...