⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f_convert.cpp

📁 包括任意进制的转换和详细注解 具体的输入输出全部有提示 请按提示进行
💻 CPP
字号:
#include<iostream>
#include"conio.h"
#include"head.h"
using namespace std;



//*********************************************************************************************************
//											XCONVERT10类实现的开始
//*********************************************************************************************************
xconvert10::xconvert10()		//构造函数,输入要输入数字的进制
{	
	 xlong=0;
	 xpoint=999;
	 head_a=0;
	 end_a=0;
	cout<<"请输入您将要输入的数字的进制(2、8、10、16):";
	cin>>x;
	while((!cin)||(!((x==2)||(x==8)||(x==10)||(x==16))))
	{
		cout<<"您输的数据不合法,请输入数字:";
		cin.clear(); 
        cin.ignore(1024,'\n');
		cin>>x;
	} 
	for(int i=0;i<100;i++)
		array[i]=' ';

}






void xconvert10::check1()		//检查输入的进制是否违规
{
	int inspect(0);		//inspect是用于标记输入的是否是2,8,10,16合法字符 不是则提示重新输入
	switch(x)			//用于判断输入是否合法 合法将1付给INSPECT
		{
			case 2:
				inspect=1;
				break;
			case 8:
				inspect=1;
				break;
			case 10:
				inspect=1;
				break;
			case 16:
				inspect=1;
				break;
			default:
				inspect=0;
				break;
		}
	while(inspect==0)
	{   
		cout<<endl<<"你输入的是"<<x<<"错误的进制,请重新输入:";
		cin.ignore(1024,'\n');
		cin>>x;
		switch(x)
		{
			case 2:
				inspect=1;
				break;
			case 8:
				inspect=1;
				break;
			case 10:
				inspect=1;
				break;
			case 16:
				inspect=1;
				break;
			default:
				inspect=0;
		}
	}
	cout<<endl<<"您输入的进制为:"<<x<<endl;
}







void xconvert10::input()		//输入X进制数字
{
	int i=0;
	xlong=0;
	xpoint=999;
	cout<<"请输入您的"<<x<<"进制数字:";
	cin.ignore(1024,'\n');
	cin>>array;

	while(array[i])
	{	
		xlong++;	//取数组长度
		if(array[i]=='.'&&xpoint==999)
		{
			xpoint=i;	//取小数点位置
	
		}
		i++;
	}
	
	cout<<endl<<"你输入的数字为:";
	cout<<array<<endl;

	check2();
}





void xconvert10::check2()		//检查输入的数字是否合法
{
	int i=0;
	int num_wrong=0;		//检测输入的数字是否含有非法字符 如:二进制只能有0,1,'.'
	int point_wrong=0;		//检查小数点的个数是否正确,可以为0或者1
	switch(x)
		{
			case 2:
				while(array[i]!='\0')
				{	
					if(array[i]!='1'&&array[i]!='0'&&array[i]!='.')
						num_wrong=1;
					if(array[i]=='.')
					{
						point_wrong++;						
					}
					i++;
				}
				break;
			case 8:
				while(array[i]!='\0')
				{	
					if((array[i]<'0'||array[i]>'7')&&array[i]!='.')
						num_wrong=1;
					if(array[i]=='.')
					{
						point_wrong++;						
					}
					i++;
				}
				break;
			case 10:
					while(array[i]!='\0')
				{	
					if((array[i]<'0'||array[i]>'9')&&array[i]!='.')
						num_wrong=1;
					if(array[i]=='.')
					{
						point_wrong++;						
					}
					i++;
				}
				break;
			case 16:
				while(array[i]!='\0')
				{	
					if((array[i]<'0'||array[i]>'9')&&array[i]!='.'&&(array[i]<'a'||array[i]>'f')&&(array[i]<'A'||array[i]>'Z'))
						num_wrong=1;
					if(array[i]=='.')
					{
						point_wrong++;						
					}
					i++;
				}
				break;				
		}
	if(array[0]=='\0')
		num_wrong=1;
	if(num_wrong==1||point_wrong>1||xpoint==0)
	{	
		cout<<endl<<"你输入的数字不合法请重新输入"<<endl;
		input();
	}
}


void xconvert10::array_convert()
{
	int i=0;
	while(array[i]!='\0')
	{
		switch(array[i])
		{
			case '.':
			a_int[i]=0;
			break;
			case '0':
			a_int[i]=0;
			break;
			case '1':
			a_int[i]=1;
			break;
			case '2':
			a_int[i]=2;
			break;
			case '3':
			a_int[i]=3;
			break;
			case '4':
			a_int[i]=4;
			break;
			case '5':
			a_int[i]=5;
			break;
			case '6':
			a_int[i]=6;
			break;
			case '7':
			a_int[i]=7;
			break;
			case '8':
			a_int[i]=8;
			break;
			case '9':
			a_int[i]=9;
			break;
			case 'a':
			a_int[i]=10;
			break;
			case 'b':
			a_int[i]=11;
			break;
			case 'c':
			a_int[i]=12;
			break;
			case 'd':
			a_int[i]=13;
			break;
			case 'e':
			a_int[i]=14;
			break;
			case 'f':
			a_int[i]=15;
			break;
			case 'A':
			a_int[i]=10;
			break;
			case 'B':
			a_int[i]=11;
			break;
			case 'C':
			a_int[i]=12;
			break;
			case 'D':
			a_int[i]=13;
			break;
			case 'E':
			a_int[i]=14;
			break;
			case 'F':
			a_int[i]=15;
			break;
		}
		i++;
	}
}

void xconvert10::convert()
{
	int m=0,n=1;
	float f=1;
	if(xpoint!=999)
		for(m=xpoint-1;m>-1;m--)
		{
			head_a+=n*a_int[m];
			n*=x;
		}
	else
		for(m=xlong-1;m>-1;m--)
		{
			head_a+=n*a_int[m];
				n*=x;
		}

	if(xpoint!=999)
	{
		for(m=xpoint+1;m<xlong;m++)
		{
			f/=x;
			end_a+=f*a_int[m];
		}
	}
	else
	{
		end_a=0;
	}
}

void xconvert10::output()
{
	cout<<"head_a="<<head_a<<endl;
	cout<<"end_a="<<end_a<<endl;
}

//*********************************************************************************************************
//											C_RESULT类实现的开始
//*********************************************************************************************************
c_result::c_result()
{
	num.input();
	num.array_convert();
	num.convert();
	cout<<"请输入您将要输出的数字的进制(2、8、10、16):";
	cin.ignore(1024,'\n');
	cin>>y;
	while((!cin)||(!((y==2)||(y==8)||(y==10)||(y==16))))
	{
		cout<<"您输的数据不合法,请输入数字:";
		cin.clear(); 
        cin.ignore(1024,'\n');
		cin>>y;
	} 
}




void c_result::head_output()
{
	int head,result,i=0;
	int Store[100];
	head=num.get_head_a();
	cout<<"你要的结果是(小数点后精确最多10位):";
	while(head>=y) 
	{ 
		result=head%y;
		head/=y;
		Store[i]=result;
		++i; 
	} 
		Store[i]=head; 
		for(;i>-1;i--)
		switch(Store[i])
		{
			case 0:
				cout<<"0";
				break;
			case 1:
				cout<<"1";
				break;
			case 2:
				cout<<"2";
				break;
			case 3:
				cout<<"3";
				break;
			case 4:
				cout<<"4";
				break;
			case 5:
				cout<<"5";
				break;
			case 6:
				cout<<"6";
				break;
			case 7:
				cout<<"7";
				break;
			case 8:
				cout<<"8";
				break;
			case 9:
				cout<<"9";
				break;
			case 10:
				cout<<"a";
				break;
			case 11:
				cout<<"b";
				break;
			case 12:
				cout<<"c";
				break;
			case 13:
				cout<<"d";
				break;
			case 14:
				cout<<"e";
				break;
			case 15:
				cout<<"f";
				break;
		}
}


void c_result::end_output()
{
	float end,result,cmp;
	int count=1,mul;
	cmp=0.0;
	end=num.get_end_a();
	if(end!=cmp)
	{	cout<<".";
	while(count<=10&&end)
	{
		mul=int(end*y);
		switch(mul)
		{
			case 0:
				cout<<"0";
				break;
			case 1:
				cout<<"1";
				break;
			case 2:
				cout<<"2";
				break;
			case 3:
				cout<<"3";
				break;
			case 4:
				cout<<"4";
				break;
			case 5:
				cout<<"5";
				break;
			case 6:
				cout<<"6";
				break;
			case 7:
				cout<<"7";
				break;
			case 8:
				cout<<"8";
				break;
			case 9:
				cout<<"9";
				break;
			case 10:
				cout<<"a";
				break;
			case 11:
				cout<<"b";
				break;
			case 12:
				cout<<"c";
				break;
			case 13:
				cout<<"d";
				break;
			case 14:
				cout<<"e";
				break;
			case 15:
				cout<<"f";
				break;
		}
		end=end*y-mul;
		count++;
	}
	}
	cout<<endl<<"谢谢使用";
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -