十进制正整数转多进制数并输出
整体思路是这样的:首先是在正整数的范围内考虑,将输进来的数以及需要进行转的制数进行判断,分为三个部分,第一部分是2-9进制,第二部分时10进制,第三部分是11-16进制;我觉得根基是2-9进制这一部分的思想,因为11-16进制是在这一基础上再加上 “数字字符的转化” 即可得到的;
首先演示各部分的效果截图:
(1)将58转化为2进制数
(2)将58转化为8进制数
(3)将58转化为10进制数
(4)将58转化为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>
以上即为我所写的代码,欢迎各位朋友提意见!!!