1. 程式人生 > >C/C++語言實現十進位制正整數轉化為2-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>

      以上即為我所寫的程式碼,歡迎各位朋友提意見!!!