package 图灵机;
import java.util.*;
/**
* 项目名称:图灵机
* 类名称:Machine
* 类描述:
* 创建人:百里梦想
* 创建时间:2020年4月15日 上午11:52:45
* @version 3.0.0
*/
public class Machine {
static Scanner sc = new Scanner(System.in);
public static String Transform(String Data) {
int i,InputNumber;
String String_Data = "";
System.out.println("请输入十进制数:");
InputNumber = sc.nextInt();
String Bin_Data = Integer.toBinaryString(InputNumber);
for(i = 0;i < Bin_Data.length();i ++) {
if(Bin_Data.charAt(i) == '1') {
String_Data = String_Data.concat("01");
}
else if (Bin_Data.charAt(i) == '0') {
String_Data = String_Data.concat("0");
}
}
String_Data = String_Data.concat("0110");
System.out.println("二进制扩展后:" + String_Data);
return String_Data;
}
public static void main(String[] args) {
String Data = "";
char data[] = new char[20];
int i,j = 0,flag = 0; //内态
Data = Transform(Data);
for(i = 0;i < Data.length();i ++) { //输入
data[i] = Data.charAt(i);
}
for(i = Data.length();i < 20;i ++) { //补0
data[i] = '0';
}
for(i = 0;i < data.length;i ++) {
if(flag == 0 && data[i] == '0') { //内态和数字都为0时,不改变
flag = 0;
data[i] = '0';
}
else if(flag == 0 && data[i] == '1') { //内态为0数字为1时,内态变为1数字变为0
flag = 1;
data[i] = '0';
}
else if(flag == 1 && data[i] == '0') { //内态为1数字为1时,内态变为10数字变为0
flag = 0;
data[i] = '1';
}
else if(flag == 1 && data[i] == '1') { //内态为1数字为0时,内态变为0数字变为1
flag = 10;
data[i] = '0';
}
else if(flag == 10 && data[i] == '0') { //内态为10数字为0时,内态变为11数字变为1
flag = 11;
data[i] = '1';
}
else if(flag == 11 && data[i]=='0') { //内态为10数字为1时,内态变为0数字变为0
flag = 0;
data[i]='1';
break;
}
}
System.out.print("原始结果为:");
for(i = 0;i < data.length;i ++) { //原始结果输出
System.out.print(data[i]);
}
System.out.println();
for(i = 0;i < data.length;i ++) { //去除前面多余的0
if(data[i] == '0' && data[i+1] == '1') {
j = i;
break;
}
}
for(;j < data.length;j ++) {
data[j-1] = data[j];
}
for(i = data.length - 1;i > 0;i --) { //去除后面多余的0
if(data[i] != data[i-1]) {
j = i;
break;
}
}
System.out.print("简化后的结果为:");
for(i = 0;i < j + 1;i ++) {
System.out.print(data[i]);
}
System.out.println();
String tempString = ""; //十进制结果拼接
for(i = 0;i < 20;i ++) {
if(data[i] == '0') {
if(data[i + 1] == '1') {
if(data[i + 2] == '1') {
break; //此时的结果为0110,结束
}
else {
tempString = tempString.concat("1"); //此时的结果为010
}
}
else {
tempString = tempString.concat("0"); //此时的结果为00
}
}
else {
if(data[i + 1] == '0') {
continue;
} else {
break;
}
}
}
System.out.println("还原二进制:" + tempString + "2");
Integer.parseInt(tempString); //格式转换并最终输出结果
System.out.println("十进制结果为:" + Integer.parseInt(tempString, 2) + ",");
}
}
整个程序分为 六 个模块:
- 十进制输入模块
- 十进制转换二进制模块
- 二进制转换扩展二进制模块
- 扩展二进制判断模块
- 扩展二进制转换二进制模块
- 二进制模块转换十进制模块
其中,前三个模块放在transform()函数中实现。
程序的核心思想为:将输入的数据由字符串转换为数组进行存储,并在数组的基础上进行操作。
程序比较简单,相信大家都能看懂,有问题的话在下面留言,我会回复。
☆