今天做了几道汉明码的题,心血来潮写了个汉明码校验程序。PS:汉明码只能检出一位错哦。没有参考其他人的代码,纯原创,暂时没发现错误,如果有错误可以在评论区提出哦~
首先是汉明码的校验方法,校验位和信息位,哎呀,不费劲讲了,下次一定。
我的大概思路是:找出错误位置,为零输出“YES” 否则输出“NO”和改正后的汉明码。
代码如下:
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int main(){
cout<<"请输入需要验证的汉明码"<<endl;
string s;
while (cin>>s){
int len=s.length(),k=log2(len+1)+1,tmp[k],loc=0;
memset(tmp,0,sizeof(tmp));
for(int i=1;i<=len;i++)
for(int j=0;j<k;j++)
if((i&int(pow(2,j)))==int(pow(2,j))) tmp[j]+=s[len-i]-'0';
for(int i=k;i>=0;i--) loc=loc*2+(tmp[i]%2);
if(loc) s[len-loc]=s[len-loc]=='1'?'0':'1';
loc==0?cout<<"YES\n\n":cout<<"NO\n"<<s<<"\n\n";
}
}
还可以再精简,我就当是抛砖引玉了。