对于XN+1或XN*2图灵机进行模拟,任意给定的十进制数a,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。 用C或C++或java或python语言实现程序解决问题。
import java.util.Scanner;
public class yy {
public static void main(String args[]) {
Scanner reader=new Scanner(System.in );
System.out.print("请输入一个整数:");
int n=reader. nextInt();
String s;
//将十进制转化为二进制
s = Integer.toBinaryString(n);
System.out.println("输出该数的二进制:"+s);
//拓展二进制编码
StringBuffer a = new StringBuffer(s.replace("1","10"));
a.append("1100");
System.out.println("输出拓展后二进制编码:"+a);
calculate(a);
System.out.println("计算结果为:"+a);
//删去无效数字
String c= a.substring(0, a.length()-2);
System.out.println(c);
//将二进制转化为十进制
int b=0;
b=Integer.parseInt(c.replace("10", "1"), 2);
System.out.println("计算结果译码后的十进制为:"+b);
}
static void calculate(StringBuffer s){
//y为内态变量
for(int i=0,y=0;i<s.length();i++){
//00→00
if(y==0 & s.charAt(i)=='0'){
y=0;
s.setCharAt(i,'0');
System.out.println("00→00: "+s+" 内态为:"+y+" 输出为:"+s.charAt(i));
continue;
}
//01→10
if(y==0 & s.charAt(i) =='1'){
y=1;
s.setCharAt(i,'0');
System.out.println("01→10: "+s+" 内态为:"+y+" 输出为:"+s.charAt(i));
continue;
}
//10→01
if(y==1 & s.charAt(i)=='0'){
y=0;
s.setCharAt(i,'1');
System.out.println("10→01: "+s+" 内态为:"+y+" 输出为:"+s.charAt(i));
continue;
}
//11→10 0
if(y==1 & s.charAt(i)=='1'){
y=10;
s.setCharAt(i,'0');
System.out.println("11→100: "+s+" 内态为:"+y+" 输出为:"+s.charAt(i));
continue;
}
//10 0→11 1
if(y==10 & s.charAt(i)=='0'){
y=11;
s.setCharAt(i,'1');
System.out.println("100→111: "+s+" 内态为:"+y+" 输出为:"+s.charAt(i));
continue;
}
//11 0→01
if(y==11 & s.charAt(i)=='0'){
y=0;
s.setCharAt(i,'1');
System.out.println("110→01: "+s+" 内态为:"+y+" 输出为:"+s.charAt(i));
break;
}
}
}
}