图灵机XN*2过程模拟(C++)

这段代码将一个十进制数转换为二进制,然后进行一系列扩展、位翻转和截取操作,最终再转换回十进制。主要涉及二进制表示、位运算和数组操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值