二进制转十六进制(递归)
题目描述 Description
输入一个二进制数,将其快速转化为十六进制数。
输入描述 Input Description
一行,一个二进制数
输出描述 Output Description
二进制所对应的十六进制形式
样例输入 Sample Input
10001100
样例输出 Sample Output
8C
数据范围及提示 Data Size & Hint
这个二进制数对应的十进制数可能会超过long long
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int a, b, c, d, len; 6 void f(string s) 7 { 8 int t; 9 len = s.size(); 10 if (len >= 4) 11 { 12 a = s[len - 1] - '0'; 13 b = s[len - 2] - '0'; 14 c = s[len - 3] - '0'; 15 d = s[len - 4] - '0'; 16 t = d * 8 + c * 4 + b * 2 + a; 17 } 18 else 19 { 20 if (len == 0) 21 { 22 return; 23 } 24 if (len == 1) 25 { 26 a = s[len - 1] - '0'; 27 b = 0; 28 c = 0; 29 d = 0; 30 } 31 else if (len == 2) 32 { 33 a = s[len - 1] - '0'; 34 b = s[len - 2] - '0'; 35 c = 0; 36 d = 0; 37 } 38 else if (len == 3) 39 { 40 a = s[len - 1] - '0'; 41 b = s[len - 2] - '0'; 42 c = s[len - 3] - '0'; 43 d = 0; 44 } 45 cout << d * 8 + c * 4 + b * 2 + a; 46 return; 47 } 48 s.erase(len - 4, 4); 49 f(s); 50 if(t>=10) 51 cout << char(t+55); 52 else 53 cout << t; 54 } 55 56 int main() 57 { 58 string s1; 59 cin >> s1; 60 f(s1); 61 }