【机试】十进制加密

#include <iostream>
#include <vector>
#include <cmath>
#define ll long long
using namespace std;

ll x;

vector<int> to_2_32bit(int x)
{
	vector<int> arr(32, 0);

	// 使用从高位到低位填充数组
	for (int i = 31; i >= 0; --i) {
		arr[i] = (x & 1);  // 获取当前位的值
		x >>= 1;           // 将 x 右移 1 位
	}

	return arr;
}

ll to_digit(vector<int>arr)
{
	ll res = 0;
	for (int i = 31, j = 0; i >= 0; i--, j++)
	{
		res += arr[i] * pow(2, j);
	}
	return res;
}

ll find_x(vector<int>arr)
{
	vector<int>x(32, 0);
	for (int i = 0; i < 32; i++)
	{
		if ((0 <= i && i <= 3)
			|| (8 <= i && i <= 11)
			|| (16 <= i && i <= 19)
			|| (24 <= i && i <= 27))
		{
			x[i] = arr[i];
		}
	}

	return to_digit(x);
}

ll find_e(vector<int>arr)
{
	vector<int>x(32, 0);
	for (int i = 0; i < 32; i++)
	{
		if ((12 <= i && i <= 15)
			|| (20 <= i && i <= 23)
			|| (28 <= i && i <= 32))
		{
			x[i] = arr[i];
		}
	}

	return to_digit(x);
}

ll find_p(vector<int>arr)
{
	vector<int>x(32, 0);
	for (int i = 4; i <= 7; i++)
	{
		x[i] = arr[i];
	}

	return to_digit(x);
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	cin >> x;

	vector<int>x_2_arr = to_2_32bit(x);
	ll x = find_x(x_2_arr), e = find_e(x_2_arr), p = find_p(x_2_arr);
	ll aws = x + (e << 8) + (p >> 24);

	cout << aws;
	return 0;
}
/*
0000 0000 0000 0000 0000 0011 0101 1000
X=0000 0000 0000 0000 0000 0000 0101 0000=80
E=0000 0000 0000 0000 0000 0011 0000 1000=776
P=0000 0000 0000 0000 0000 0000 0000 0000=0

X + E * (256) + (P / 16,777,216)
208 + 1026 * 256
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值