一:题目要求
模仿图灵机进行运算:XN*2
二:题目分析与实现
1 对输入的整数进行扩展,即先将其转为二进制数,再扩展为需要的二进位序列。具体代码如下:
int extend(int x,int a[],int l) //扩展
{
int i,j;
i=j=l/2;
while(x!=0) //将X转为二进制
{
if(x%2==0)
{
i--;
}
else
{
a[i]=1;
i=i-2;
}
x=x/2;
}
a[j+1]=0; //手动添加“,(110)”
a[j+2]=1;
a[j+3]=1;
a[j+4]=0;
return i;
}
2 通过六条指令进行*2运算,使用一指针P,将P指向数组的首位,用循环嵌套来判断输入和内态,改变P即可改变当前内态,且完成输出并移向下一位,具体代码如下:
void operation(int a[],int n) //进行*2
{
int *p,f;
int i=0;
int stop=0;
p=a+n;
while(!stop) //六条运算指令
{
f=*p;
if(i==0&&f==0)
p++;
else if(i==0&&f==1)
{ i=1;*p=0;
p++;
}
else if(i==1&&f==0)
{ i=0;*p=1;
p++;