FZU 1078 计算循环冗余码【模拟】
1.协议事先约定一个二进制生成表达式,本题设为10011;
2.将待发送的二进制数据串的末尾加4个0;
3.将补上0的数据串按模2除法除于生成表达式,取余数;
4.该余数就是该二进制数据串的循环冗余码。
例如:
数据串为:1101011011
生成表达式为:10011
循环冗余码为:1110
计算过程如下:
根据上述的计算方法,请编写一个循环冗余码计算程序,假设二进制数据串的长度不超过20位,生成表达式固定为10011。
Input
Output
Sample Input
2
1101011011
10101010
Sample Output
01110
01001
【分析】:首先要了解循环冗余校验码是什么。
循环冗余校验码是通过除法运算来建立有效信息位和校验位之间的约定关系。假定,待编码的有效信息以多项式M(X)表示,将它左移若干位后,用另一个约定的多项式G(X)去除,所产生的余数就是校验位。有效信息位与校验位相拼接就构成了CRC码。当接收方收到发来的CRC码后,他仍用约定的多项式G(X)去除,若余数为0,表明该代码接收无误;若余数不为0,表明某一位出错,再进一步由余数值确定出错的位置,并予以纠正。
循环冗余校验码的编码方法:
循环冗余校验码由两部分组成,左边为信息位,右边为校验位。若信息位为N位,校验位为K位,则该校验码被称为(N+K,N)码。
这里,需介绍一下模2的运算规则。模2运算不考虑加法的进位和减法的借位,即0±0=0,0±1=1,1±0=1,1±1=0。作模2除法时,上商的原则是当部分余数首位是1时(即使被除数比除数小),商取1,反之商取0,然后按模2加减求得余数。当被除数逐步除完时,最终的余数比除数少一位,此余数就是校验位。
对“模2除法”进行说明:
“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。
g(x)和h(x)的除运算,可以通过g和h做xor(异或)运算。二进制相除就是一个异或的过程。比如将11001与10101做xor运算:

明白了xor运算法则后,举一个例子使用CRC-8算法求101001110100001的效验码。CRC-8标准的h(x) = x^8 + x^7 + x^6 + x^4 + x^2 + 1,既h是9位的二进制串111010101。

经过迭代运算后,最终得到的r是10001100,这就是CRC效验码。
【代码】:明白原理后就是简单模拟。
#include <iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<streambuf>
#include<cmath>
#include<string>
using namespace std;
#define ll long long
#define oo 10000000 int n,m;
char b[]="";
int main()
{
string a;
int t;
scanf("%d",&t);
while(t--)
{
cin>>a;
a=a+"";
for(int i=;i<a.size()-;i++)
{
if(a[i]=='')
{
continue;
}
int p=i;
for(int j=;j<;j++,p++)
{
if(a[p]^b[j])
a[p]='';
else
a[p]='';
}
}
for(int i=a.size()-;i<a.size();i++)
printf("%c",a[i]);
printf("\n");
}
return ;
}
模拟
FZU 1078 计算循环冗余码【模拟】的更多相关文章
- uva 327 Evaluating Simple C Expressions 简易C表达式计算 stl模拟
由于没有括号,只有+,-,++,--,优先级简单,所以处理起来很简单. 题目要求计算表达式的值以及涉及到的变量的值. 我这题使用stl的string进行实现,随便进行练手,用string的erase删 ...
- FZU 1893 内存管理 模拟
比赛的时候队友要做这道题…… 他没做出来自己也被误导了…… 也算是个教训 自己还是要有自己的思路…… 又是模拟题…… 网上都是用vector做的 我最近才会stl 怎么会用那么高大上的的东西…… 强力 ...
- 全国绿色计算大赛 模拟赛第一阶段(C++)第1关:求和
挑战任务 这次“绿盟杯”大赛,小明作为参赛选手在练习的时候遇到一个问题,他要对一个范围的两个数进行数位的累加,例如有两个数 15,19 则 他们的数位和应该为:1+5+1+6+1+7+1+8+1+9, ...
- 承压计算:模拟+double
标题:承压计算 X星球的高科技实验室中整齐地堆放着某批珍贵金属原料. 每块金属原料的外形.尺寸完全一致,但重量不同.金属材料被严格地堆放成金字塔形. 7 ...
- hdu5387 钟表指针之间夹角(分数计算,模拟)
题意: 给你一个24格式的数字时间,(字符串),问你这个时刻时针与分针 时针与秒针 分针与秒针 之间的夹角, 我们发现 秒针每秒转6度,分针每秒转1/10度,每分转6度,时针每小时转30度,每分转1/ ...
- 全国绿色计算大赛 模拟赛第二阶段 (Python)
第1关气温预测 def dailyTemps(temp_list): result = [] for ca in range(0, len(temp_list)-1): for i in range( ...
- 全国绿色计算大赛 模拟赛第一阶段(Python)
第1关求和 class Task: def getSum(self, num1, num2): sum = 0 for i in range(num1, num2 + 1): while (i != ...
- [LeetCode] 数学计算模拟类问题:加法,除法和幂,注意越界问题。题 剑指Offer,Pow(x, n) ,Divide Two Integers
引言 数学计算的模拟类题目,往往是要求实现某种计算(比如两数相除),实现的过程中会有所限定,比如不允许乘法等等. 这类题目首先要注意计算过程中本身的特殊情况.比如求相除,则必须首先反映过来除数不能为0 ...
- 理工科应该的知道的C/C++数学计算库(转)
理工科应该的知道的C/C++数学计算库(转) 作为理工科学生,想必有限元分析.数值计算.三维建模.信号处理.性能分析.仿真分析...这些或多或少与我们常用的软件息息相关,假如有一天你只需要这些大型软件 ...
随机推荐
- 启动子Activity
启动普通子Activity: 一个activity启动另一个activity最简单的方式是使用 startActivity(Intent) 方法: public void startActivity( ...
- 转载: CRichEditCtrl使用大全
richedit 常见使用问题 一.常见问题 a.可以编译,不能执行的 在需要在相应的对话框中加上InitInstance(void)函数中添加 AfxInitRichEdit(); b.升级默认的R ...
- Docker Hadoop LAMP安装配置教程
以下教程来自九章算法. 1.How to install Dockerhttps://bupt.quip.com/YehSAR4qnGqB 2.How to set up hadoop environ ...
- Leetcode 649.Dota2参议院
Dota2参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决定.他们以一 ...
- Leetcode 553.最优除法
最优除法 给定一组正整数,相邻的整数之间将会进行浮点除法操作.例如, [2,3,4] -> 2 / 3 / 4 . 但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级.你需要找出怎么添 ...
- 从xml文件中绑定数据到DropDownList控件上
参考了2篇文章: http://www.cnblogs.com/JuneZhang/archive/2010/11/23/1885671.html http://blog.sina.com.cn/s/ ...
- jsp运行机制
一.JSP机制概述 可以把执行JSP页面的执行分成两个阶段,一个是转译阶段,一个是请求阶段. 转译阶段:JSP页面转换成Servlet类. 请求阶段:Servlet类执行,将响应结果发送至客户端. 1 ...
- 【转】Unity 游戏存档 PlayerPrefs类的用法
http://www.cnblogs.com/qiaogaojian/p/5969855.html unity3d提供了一个用于本地持久化保存与读取的类——PlayerPrefs.工作原理非常简单,以 ...
- jquery操作select(取值,设置选中
比如<select class="selector"></select> 1.设置value为pxx的项选中 $(".selector" ...
- mybatis maven 代码生成器(mysql)
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...