**
问题描述:
**
于XN*2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。 用C语言实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.提供友好的输入输出,并进行输入数据的正确性验证。
**
分析:
**
图灵机XN*2在扩展的二进位上实现运算的指令为:
0 0→0 0R,
0 1→1 0R,
1 0→0 1R,
1 1→10 0R,
10 0→11 1R,
11 0→0 1STOP。
若要模拟XN*2图灵机,就要做到以下步骤:
(1)提供一个能够输入十进制数字的方法。
(2)将该十进制数字转化为二进制数字。
(3)按照0→0;1→10;,(逗号)→110的规则将二进制数字转换为扩展二进位编码。
(4)按照上述运算指令规则,逐位从左到右依次进行XN*2图灵机运算。
(5)将运算后得到的扩展二进位编码转化成二进制数字,再将其转化成十进制数字。
**
实现代码:
**
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int n,m,i=0,j,a[20],b[20],sum=0,x;
printf("请输入一个十进制整数:");
scanf("%d",&n);
memset(a,0,sizeof(a));
memset(a,0,sizeof(b)); //初始化a,b
while(n)
{
a[i++]=n%2;
n/=2;
}
for(j=i,m=0;j>=0;j--)
{
b[m]=a[j];
m++;
}
b[i+1]=3; //将3设置为逗号,即0110
printf("转化为二进制数:\n"); //十进制转化为二进制
for(