uva128 - 软件CRC
2013-04-27 17:09
106 查看
不算的对原串进行取余,,
做后结合余数得出CRC码
r是最后的余数,m是34943,
因为(r*256*256+c)%m==0
所以最小的c是使得(r*256*256+c)==m的值
所以c = m-(r*256*256)%m
代码如下:
#include <cstdio>
#include <cstring>
#define M 1100
char s[M];
const int m = 34943;
int solve(int len)
{
long long ans = 0;
for(int i = 0; i < len; i++)
ans = (ans*256+s[i])%m;
return ans%m;
}
int main ()
{
while(gets(s))
{
int len = strlen(s);
if(len==1&&s[0]=='#') break;
if(len==0) {printf("00 00\n"); continue;}
long long ans = solve(len);
ans = (m - (256*256*ans%m))%m;
int aa[10] = {0,0,0,0};
for(int i = 0; ans; i++)
{
int t;
aa[i] = ans%16;
ans /= 16;
}
printf("%X%X %X%X\n",aa[3],aa[2],aa[1],aa[0]);
}
return 0;
}
做后结合余数得出CRC码
r是最后的余数,m是34943,
因为(r*256*256+c)%m==0
所以最小的c是使得(r*256*256+c)==m的值
所以c = m-(r*256*256)%m
代码如下:
#include <cstdio>
#include <cstring>
#define M 1100
char s[M];
const int m = 34943;
int solve(int len)
{
long long ans = 0;
for(int i = 0; i < len; i++)
ans = (ans*256+s[i])%m;
return ans%m;
}
int main ()
{
while(gets(s))
{
int len = strlen(s);
if(len==1&&s[0]=='#') break;
if(len==0) {printf("00 00\n"); continue;}
long long ans = solve(len);
ans = (m - (256*256*ans%m))%m;
int aa[10] = {0,0,0,0};
for(int i = 0; ans; i++)
{
int t;
aa[i] = ans%16;
ans /= 16;
}
printf("%X%X %X%X\n",aa[3],aa[2],aa[1],aa[0]);
}
return 0;
}
相关文章推荐
- UVa 128 Software CRC / 进制转换
- UVa OJ 128 - Software CRC (软件CRC)
- UVa 128 Software CRC (模计算&CRC循环冗余校验码)
- UVa 128 - Software CRC
- UVA 128 Software CRC
- uva 128 Software CRC
- 关于在光盘镜像或大型软件下载中“MD5”“SHA1”“CRC”校验值的内涵及其特性
- UVa 128 Software CRC(模运算)
- win 10 电脑与 H C-05蓝牙模块连接方法集合(含k60 CRC 校验代码软件下载地址)
- MICROSOFT INTERNET EXPLORER 128 位高加密功能软件组件
- UVa 128 Software CRC
- 128 - Software CRC//大数求余
- uva 128
- UVa 128 - Software CRC
- Software CRC - UVa 128 取模
- uva 128(简单题)
- UVA - 128 Software CRC
- UVaOJ128 - Software CRC
- CRC的校验原理及硬件、软件算法实现(转)
- CRC的校验原理及硬件、软件算法实现