题意:
给一个字符串,代表一个256进制的数,然后要求在这个字符串后加两个字符,使其在十进制下能被34943。
解析:
先把256进制数转为10进制数,然后左移两位空出最后两个字符的位置,最后10进制转成16进制就行了。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>
#define LL long long
using namespace std;
const int maxn = 1024 + 10;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = 4 * atan(1.0);
const double ee = exp(1.0);
const int mod = 34943;
char str[maxn];
char c[] = "0123456789ABCDEF";
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
while (gets(str))
{
if (str[0] == '#')
break;
int len = strlen(str);
LL t = 0;
for (int i = 0; i < len; i++)
{
/// * 256 进制转换为10进制,相当于左移一位
t = ((t << 8) + str[i]) % mod;
}
///左移两位,空出俩位置
t = ((t << 8) << 8) % mod;
t = (mod - t) % mod;
int num[5];
for (int i = 0; i < 4; i++)
{
num[i] = t % 16;
t /= 16;
}
printf("%c%c %c%c\n",c[num[3]],c[num[2]],c[num[1]],c[num[0]]);
}
return 0;
}