算法基础 |
您所在的位置:网站首页 › 十六进制转四进制算法 › 算法基础 |
进制转换
六进制,八进制,二进制,十进制之间的转换是最基本的能力,但有些题目对于新手来说有点难以理解,我拿出一道题来拓展的讲一讲。 进制转换方法: 1、二进制转八进制——取每三位按权相加。 2、二进制转十六进制—取每四位按权相加。 3、二进制转十进制——按权相加。 4、八进制转二进制——熟练掌握二进制转换,做到看到一个数直 接写它的二进制数,再将二进制相连接,不足三位补0,去前导 0。 6、十六进制转二进制—同八进制,注意不足四位补0,去前导0. 7、十进制转八进制——除八取余。 8、十进制转十六进制—除十六取余。 9、十六进制和八进制转十进制通过二进制转换。 问题描述给定n个十六进制正整数,输出它们对应的八进制数。 输入格式输入的第一行为一个正整数n (1 switch(sixteen[j]) { case '0':tow+="0000";break; case '1':tow+="0001";break; case '2':tow+="0010";break; case '3':tow+="0011";break; case '4':tow+="0100";break; case '5':tow+="0101";break; case '6':tow+="0110";break; case '7':tow+="0111";break; case '8':tow+="1000";break; case '9':tow+="1001";break; case 'A':tow+="1010";break; case 'B':tow+="1011";break; case 'C':tow+="1100";break; case 'D':tow+="1101";break; case 'E':tow+="1110";break; case 'F':tow+="1111";break; default:break; } } 二进制转八进制是从右往左每3位按权相加,不足补0。所以我们在转换之前先要确保它是3的整除数。 if(tow.length()%3==1)//1 tow="00"+tow; //001 if(tow.length()%3==2) tow="0"+tow;因为要确保不能存在前导0,所以我们拿出前三个来判断他们相加是不是等于0,即他们三个等不等于0: if(!(tow[0]=='0'&&tow[1]=='0'&&tow[2]=='0')) { char temp; temp = (tow[0]-'0')*4+(tow[1]-'0')*2+tow[2]; eight += temp; }‘10’+5, 即‘10’的ASCLL码加上5, 即‘15’的ASCLL码 如果我是char temp=15,那就是ASCLL码为15的值。 然后对后面的进行转换: for(int j=3; j if(tow.substr(j,3)=="000") eight+="0"; else if(tow.substr(j,3)=="001") eight+="1"; else if(tow.substr(j,3)=="010") eight+="2"; else if(tow.substr(j,3)=="011") eight+="3"; else if(tow.substr(j,3)=="100") eight+="4"; else if(tow.substr(j,3)=="101") eight+="5"; else if(tow.substr(j,3)=="110") eight+="6"; else if(tow.substr(j,3)=="111") eight+="7"; }这是我做的完整的代码,一开始我以为是输入完十六进制后再一起输出八进制,后来发现输入一个输出一个和一起输入一起输出都是对的。 #include using namespace std; int main() { int n; cin>>n; for(int i=0; i switch(sixteen[j]) { case '0':tow+="0000";break; case '1':tow+="0001";break; case '2':tow+="0010";break; case '3':tow+="0011";break; case '4':tow+="0100";break; case '5':tow+="0101";break; case '6':tow+="0110";break; case '7':tow+="0111";break; case '8':tow+="1000";break; case '9':tow+="1001";break; case 'A': case 'a':tow+="1010";break; case 'B': case 'b':tow+="1011";break; case 'C': case 'c':tow+="1100";break; case 'D': case 'd':tow+="1101";break; case 'E': case 'e':tow+="1110";break; case 'F': case 'f':tow+="1111";break; } } if(tow.length()%3==1) tow="00"+tow; if(tow.length()%3==2) tow="0"+tow; if(!(tow[0]=='0'&&tow[1]=='0'&&tow[2]=='0')) { char temp; temp = (tow[0]-'0')*4+(tow[1]-'0')*2+tow[2]; eight += temp; } for(int j=3; j |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |