算法分析
1.首先需要完成数的进制转换,将二进制数转化成十进制数,如何转化呢,这里采用除二取余的方法,这种方法就是不断得到余数,放进数组arr[],最后除以颠倒一下就行了。
2.转换成拓展二进制编码,规则就是1->10,0->0, ,->变成110,为了方便计算,后面可以多加几个0,第一位一定是0
3.将XN×2的六条指令输入进去判断里面,然后将转化好的拓展二进制编码输入循环系统进行判断,到了STOP就退出循环,结束运算。
流程图:
代码实现
下面展示一些 代码
。
```C++
#include<iostream>
using namespace std;
int main()
{
int n,i,j;
int temp,k,len;
int m=0;
int a[20],arr[20];
int flag=0;
cout<<"请输入一个正整数";
cin>>n;
while(n>0)
{
arr[i]=n%2; //获取余数,计算二进制结果
n=n/2;
i++;
}
k=i;
for(j=0;j<i/2;j++)
{
temp=arr[j];
arr[j]=arr[i-j-1];
arr[i-j-1]=temp;
}
cout<<"正整数转换为二进制的结果为:";
for(i=0;i<k;i++)
{
cout<<arr[i];
}
cout<<"扩展的二进位编码为:"<<endl;//扩展的二进位编码
for(j=0;j<k;j++)
{
if(arr[j]==1)
{
if(j==0)
{ a[m]=0;
m++;
a[m]=arr[j];
m++;
a[m]=0;
}
else
{
a[m]=arr[j];
m++;
a[m]=0;
}
m++;
}
else if(arr[j]==0)
{
a[m]=arr[j];
m++;
}
}
int array[6]={1,1,0,0,0,0};//{1,1,0}表示逗号,为了计算方便需要在后面多加一些0
for(int x=0;x<6;x++)
{
a[m++]=array[x];
}
len=m+1;
for (m=0; m<len; m++)
{
if (a[m] == 0 || a[m] == 1)
{
cout<< a[m]; //输出a[]
}
}
cout<<endl;
int count=0;
for(i=0;i<m;i++)
{
if(flag==0&&a[i]==0) // 内态为0输入为0时,內态变为0输入变为0
{
flag=0;
a[i]=0;
count++;
}
else if(flag==0&&a[i]==1) //内态为0输入为1时,内态变为1输入变为0
{
flag=1;
a[i]=0;
count++;
}
else if(flag==1&&a[i]==0) //内态为1输入为0时,内态变为0输入变为1
{
flag=0;
a[i]=1;
count++;
}
else if(flag==1&&a[i]==1) //内态为1输入为1时,内态变为10输入变为0
{
flag=10;
a[i]=0;
count++;
}
else if(flag==10&&a[i]==0) //内态为10输入为0时,内态变为11输入变为1
{
flag=11;
a[i]=1;
count++;
}
else if(flag==10&&a[i]==1) //内态为10输入为1时,内态变为0输入变为0
{
flag=0;
a[i]=0;
count++;
}
else if(flag==11&&a[i]==0) //内态为11输入为0时,内态变为0输入变为1
{
flag=0;
a[i]=1;
count++;
}
else if(flag==11&&a[i]==1) //内态为11输入为1时,内态变为0输入变为0
{
flag=0;
a[i]=0;
count++;
}
cout<<"第";
cout<<count;
cout<<"次";
cout<<"运行结果:";
for(j=0;j<m;j++)
{
cout<<a[j];
}
cout<<endl;
}
return 0;
}