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

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

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

       整体思路是这样的:首先是在正整数的范围内考虑,将输进来的数以及需要进行转的制数进行判断,分为三个部分,第一部分是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>

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