C/C++语言实现十进制正整数转化为2-16进制的数并输出

时间:2021-10-03 22:25:17

十进制正整数转多进制数并输出

       整体思路是这样的:首先是在正整数的范围内考虑,将输进来的数以及需要进行转的制数进行判断,分为三个部分,第一部分是2-9进制,第二部分时10进制,第三部分是11-16进制;我觉得根基是2-9进制这一部分的思想,因为11-16进制是在这一基础上再加上 “数字字符的转化” 即可得到的;
      首先演示各部分的效果截图:
    (1)将58转化为2进制数
  C/C++语言实现十进制正整数转化为2-16进制的数并输出
   
   (2)将58转化为8进制数
C/C++语言实现十进制正整数转化为2-16进制的数并输出

   (3)将58转化为10进制数
C/C++语言实现十进制正整数转化为2-16进制的数并输出

   (4)将58转化为16进制数
C/C++语言实现十进制正整数转化为2-16进制的数并输出


     剩下来的即为代码的解释---代码能说明一切
<h3>/<span style="font-size:18px;">/将一个十进制的正整数转化为H进制并输出--拓展  在此先研究对于正整数的进制转换  以及2-16的进制与十进制的转换
#include <IOSTREAM>
using namespace std;
//定义转化为存储的进制数的数组的最大个数
const long N=1000L;
//将十进制的正整数转化为2-9进制的数并输出
void TransFromDecToBin(int Num,int H)
{
	//定义数组是起到类似栈那样的功能:后进先出
	int Hexadecimal[N];
	int test=0;
	int i=0;
	test=Num/H;
	while (test!=0)
	{	
		Hexadecimal[i++]=Num%H;
		Num=test;
		test=Num/H;
	}
	//Binary[i]=1;
	Hexadecimal[i]=Num;
	for (int j=i;j>=0;j--)
	{
		cout<<Hexadecimal[j];
	}
	//cout<<"ewe"<<endl;
	cout<<endl;
}

//用于存放当正整数进制数为0-9时   转化为字符0-9 ---只需要加上48并返回  注意返回的已经是字符了0-9
char ReturnCharHexaWithNum(int num)
{
	return num+48;
}
//用于存放当正整数为10-15时   转化为相对应的字符进制数a-f   只需要加上87并返回  注意返回的已经是字符了a-f
char ReturnCharHexaWithChar(int num)
{
	return num+87;
}
//将十进制的正整数转化为11-16进制的数并输出
void TransFromDecimalToHexa(int Num,int H)
{
	char Hexadecimal[N];
	
	int test=0;
	int i=0;
	test=Num/H;
	while (test!=0)
	{	
		if ((Num%H>=0)&&(Num%H<=9))
		{
			Hexadecimal[i++]=ReturnCharHexaWithNum(Num%H);
		}
		else
		{
			Hexadecimal[i++]=ReturnCharHexaWithChar(Num%H);
		}
		Num=test;
		test=Num/H;
	}
	if ((Num>=0)&&(Num<=9))
	{
		Hexadecimal[i]=ReturnCharHexaWithNum(Num);
	}
	else
	{
		Hexadecimal[i]=ReturnCharHexaWithNum(Num);
	}
	
	for (int j=i;j>=0;j--)
	{
		cout<<Hexadecimal[j];
	}
	//cout<<"ewe"<<endl;
	cout<<endl;
}
//Main函数实现调用
int main()
{
	int num;
	cout<<"输入一个正整数: ";
	cin>>num;
	int h;
	cout<<"输入需要将此正整数转化的进制数: ";
	cin>>h;
	if ((num>0) && (h>=2) && (h<=16))
	{
		if ((h>=2)&&(h<=9))
		{
			TransFromDecToBin(num,h);
		}
		else if (h==10)
		{
			printf("转化为10进制数即为此数本身,即: %d\n",num);
		}
		else if ((h>=11)&&(h<=16))
		{
			TransFromDecimalToHexa(num,h);
		}
	}
	else
	{
		cout<<"请输入正整数 或者 2-16进制数\n"<<endl;
	}

	/*
	这是一个不错的测试:存储进制时以字符为主,将0-9字符转化为数字0-9:只需要其整数的数字加上48即可
	int i=48;
	char j='c';
	char H[2];
	H[0]=i;
	H[1]=j;
	for (int k=0;k<2;k++)
	{
		cout<<H[k]<<endl;
	}*/
	return 0;
}</span></h3>

      以上即为我所写的代码,欢迎各位朋友提意见!!!