UVA128 - Software CRC(大数取模)
2014-11-12 11:03
267 查看
UVA128 - Software CRC(大数取模)
题目链接
题目大意:给你一个字符串,这个字符串代表的是256进制的一个数,要求在这个字符串后面再加上两个两个字节,使得这个新的字符串的值取模于34943等于0.最后要求你输出这两个字节(十六进制)。
解题思路:256进制的数先转化成十进制的数m,然后求出还需要的数n使得(n + m)%34943 ==0 ,最后再将n转换成16进制的数输出就可以了。
代码:
题目链接
题目大意:给你一个字符串,这个字符串代表的是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]); } }
相关文章推荐
- uva 128 Software CRC
- uva 128 Software CRC
- UVA - 128 Software CRC 256进制
- UVa 128 - Software CRC
- UVA 11879 multiple 17(大数取模)
- UVA 10494 - If We Were a Child Again(大数除法和取模)
- UVA 128 Software CRC(数论 进制转化)
- UVa 128 - Software CRC
- UVa 128 Software CRC
- UVA 128 Software CRC
- UVA - 128 Software CRC
- UVa 128 Software CRC (模计算&CRC循环冗余校验码)
- UVA - 128 Software CRC
- UVa 128 - Software CRC
- uva 128 - Software CRC
- UVA 128 - Software CRC
- uva 128 Software CRC(进制转换)
- UVaOJ128 - Software CRC
- uva 128 - Software CRC(进制转换)
- UVA128- Software CRC