SS_ 十六进制转八进制
2016-01-08 17:46
435 查看
目的1:16进制->2进制->8进制
目的2:进制转化注意添0和灭0(2处)
#include "iostream" #include "string" using namespace std; int main(){ int n; cin>>n; while(n--){ string s_16; string s_8; string s_2; int length; cin>>s_16; length=s_16.length(); //转化成二进制 for(int i=0;i<length;i++){ switch(s_16[i]){ case '0':s_2+="0000";break; case '1':s_2+="0001";break; case '2':s_2+="0010";break; case '3':s_2+="0011";break; case '4':s_2+="0100";break; case '5':s_2+="0101";break; case '6':s_2+="0110";break; case '7':s_2+="0111";break; case '8':s_2+="1000";break; case '9':s_2+="1001";break; case 'A':s_2+="1010";break; case 'B':s_2+="1011";break; case 'C':s_2+="1100";break; case 'D':s_2+="1101";break; case 'E':s_2+="1110";break; case 'F':s_2+="1111";break; } } length=s_2.length(); //3个二进制转化成一个八进制,如果s_2.length()不是3的倍数就报错 if(length%3==1){ s_2="00"+s_2; } if(length%3==2){ s_2="0"+s_2; } //转化成八进制 for(int i=0;i<length;i=i+3){ int add=(s_2[i]-'0')*4+(s_2[i+1]-'0')*2+(s_2[i+2]-'0'); switch(add){ case 0:s_8+="0";break; case 1:s_8+="1";break; case 2:s_8+="2";break; case 3:s_8+="3";break; case 4:s_8+="4";break; case 5:s_8+="5";break; case 6:s_8+="6";break; case 7:s_8+="7";break; } } length=s_8.length(); for(int i=0;i<length;i++){ //将首位置0灭掉,就像数字电子逻辑的灭0操作 if(i==0&&s_8[0]=='0'){ continue; } cout<<s_8[i]; } cout<<endl; } return 0; }
这里2处switch语句省去了很多麻烦
相关文章推荐
- Jquery Jsonp跨域提交表单获取返回数据
- 中央处理器
- 自定义协议从自己的一个app打开另一个app
- VMware安装linux虚拟机
- as3 性能相关的帖子
- Java中唯一数的生成
- 机器学习之非监督学习与强化学习
- 矩阵等式 matrix identity(numpy仿真)
- php 魔术方法 __sleep() __wakeup() __toString() __debuginfo()
- [火] cat less more 命令语法高亮输出
- AndroidListview学习——带有多种资源的listview
- 一个有用的python装饰器 -- 为执行程序加锁
- curl_error()报错:SSL certificate problem: self signed certificate in certificate
- 结构化查询语言
- ubuntu安装tomcat8
- 排序算法
- 给程序猿男朋友买了一把2千块的机械键盘,然后对他说:用它养我
- mysql-binlog日志全功率
- DataNode迁移方案
- Lua学习笔记6:C++和Lua的相互调用