#include<bits\stdc++.h>
using namespace std;
int size1 = 0;
int size2 = 0;
int size3 = 0;
int size4 = 0;
int* transform(int x)
{
int rem;
int i = 0, j = 0;
int r;
int a[100];
static int b[100];
while(x!=0)
{
rem = x%2;
a[i] = rem;
i++;
x/=2;
}
for(r=i-1; r>=0; r--)
{
b[j] = a[r];
j++;
}
size1 = j;
return b;
}
int* extend(int p[])
{
int i = 0, j, k;
static int c[100];
c[i] = 0;
i++;
for(j=0; j<size1; j++)
{
k = p[j];
if(k==0)
{
c[i] = 0;
i++;
}
else if(k==1)
{
c[i] = 1;
i++;
c[i] = 0;
i++;
}
}
c[i] = 1;
i++;
c[i] = 1;
i++;
c[i] = 0;
size2 = i+1;
return c;
}
int* turn(int q[])
{
int i, j = 0, k = 0;
int inner = 0;
for(i=0; i<size2+2; i++)
{
k = q[i];
if(k==0 && inner==0)
{
q[i] = 0;
inner = 0;
}
else if(k==0 && inner==1)
{
q[i] = 1;
inner = 0;
}
else if(k==0 && inner==10)
{
q[i] = 1;
inner = 11;
}
else if(k==0 && inner==11)
{
q[i] = 1;
inner = 0;
}
else if(k==1 && inner==0)
{
q[i] = 0;
inner = 1;
}
else if(k==1 && inner==1)
{
q[i] = 0;
inner = 10;
}
else if(k==1 && inner==10)
{
q[i] = 0;
inner = 0;
}
}
size3 = i;
cout<<size3;
return q;
}
int* begian(int r[])
{
int i, j = 0;
static int d[100];
for(i=1; i<size3-3; i++)
{
if(r[i]==0 && r[i+1]==0 )
{
d[j] = 0;
j++;
continue;
}
if(r[i]==0 && r[i+1]==1 && r[i+2]==0)
{
d[j] = 1;
j++;
continue;
}
}
size4 = j;
return d;
}
int reverse(int s[])
{
int sum = 0;
int i;
for(i=0; i<size4; i++)
{
sum += s[i] * (int)pow(2,(size4-1-i));
}
return sum;
}
int main()
{
int x;
int i = 0;
printf("请输入一个数:\n");
cin>>x;
int*p;
p = transform(x);
printf("十进制数转换成二进制数为:\n");
if(x==0)
cout<<x;
for(i=0; i<size1; i++)
cout<<p[i];
cout<<endl;
int*q;
q = extend(p);
printf("扩展二进制为:\n");
for(i=0; i<size2; i++)
cout<<q[i];
cout<<endl;
int*r;
r = turn(q);
printf("按照指令生成的二进制数:\n");
for(i=0; i<size3; i++)
cout<<r[i];
cout<<endl;
int*s;
s = begian(r);
printf("结果二进制数:\n");
for(i=0; i<size4; i++)
cout<<s[i];
cout<<endl;
int y;
y = reverse(s);
printf("结果十进制数:\n");
cout<<y;
cout<<endl;
return 0;
}
图灵机XN*2过程模拟(C++)
最新推荐文章于 2025-08-04 19:56:00 发布