首页 > 代码库 > UVA128 - Software CRC(大数取模)
UVA128 - Software CRC(大数取模)
UVA128 - Software CRC(大数取模)
题目链接
题目大意:给你一个字符串,这个字符串代表的是256进制的一个数,要求在这个字符串后面再加上两个两个字节,使得这个新的字符串的值取模于34943等于0.最后要求你输出这两个字节(十六进制)。
解题思路:256进制的数先转化成十进制的数m,然后求出还需要的数n使得(n + m)%34943 ==0 ,最后再将n转换成16进制的数输出就可以了。
代码:
#include <cstdio>
#include <cstring>
typedef long long ll;
const int maxn = 1<<10 + 5;
const int MOD = 34943;
char str[maxn];
char num[4];
int t[4];
void init () {
t[0] = 1;
for (int i = 1; i < 4; i++)
t[i] = t[i - 1] * 16;
}
int solve () {
int len = strlen(str);
ll ans = 0;
for (int i = 0; i < len; i++)
ans = (ans * 256 + (ll)str[i]) % MOD;
ans = ((ans * 256) %MOD * 256) % MOD;
return (MOD - (int)ans) % MOD;
}
char change(int num) {
if (num >= 0 && num <= 9)
return num + ‘0‘;
else
return ‘A‘ + num - 10;
}
void trans (int ans) {
for (int i = 3; i >= 0; i--) {
if (ans >= t[i]) {
num[i] = change(ans / t[i]);
ans = ans % t[i];
} else
num[i] = ‘0‘;
}
}
int main () {
init();
while(gets(str) != NULL) {
if (str[0] == ‘#‘)
break;
trans(solve());
printf ("%c%c %c%c\n", num[3], num[2], num[1], num[0]);
}
}
UVA128 - Software CRC(大数取模)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。