二进制转化为十六进制
2015-07-01 21:55
417 查看
二进制转化为十六进制
时间限制: 3 Sec 内存限制: 64 MB提交: 433 解决: 45
[提交][状态][讨论版]
题目描述
输入一个2进制的数,要求输出该2进制数的16进制表示。 在16进制的表示中,A-F表示10-15
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000
输出
n行,每行输出对应一个输入。 输出没有前导的0。
样例输入
2100000111
样例输出
207
提示
来源
百练2798,测试数据by 09游戏张文君
这题的实现不难,只是要注意一下变态的数据,输入00000时应该输出0,要是漏了这步就会变为00就会Wa。
二进制化十六进制直接拿二进制的四位就是十六进制的一位。
AC代码:
#include <iostream> #include <cstring> using namespace std; const int t=20000000; char a[t],b[t]; int val(int j) { int sum=0,k=j-4; if(j-4<0)k=0;//相当于不够四位的补位操作 for (int i=k;i<j;i++) //二进制四位转十进制的数 { if (a[i]=='0') { sum*=2; } else { sum=sum*2+a[i]-'0'; } } return sum; } int main() { int n=2,tt,m=15,i,j,len,f; cin >> f; cin.get(); while(f--) { cin.getline(a,t); len=strlen(a); j=0; while(len>=4) { tt=val(len); if(tt>=0&&tt<=9)//转十六进制 b[j++]=tt+'0'; else b[j++]=tt+55; len-=4; } if(len)//还有小于四位的二进制数 b[j++]=val(len)+'0'; len=j-1; while(b[len]=='0'&&len>0)//排除多个0的情况 { len--; } for(i=len;i>=0;--i) { cout << b[i]; } cout << endl; } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- mysql binlog二进制日志详解
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解
- C++中引用(&)的用法与应用实例分析