十六进制转二进制(递归)

题目描述 Description

将一个十六进制数转化为一个二进制数。

输入描述 Input Description

一行,一个十六进制下的整数

输出描述 Output Description

这个十六进制数对应的二进制结果

样例输入 Sample Input

FEDCBA

样例输出 Sample Output

111111101101110010111010

数据范围及提示 Data Size & Hint

十六进制数转换得到的十进制数结果有可能超过long long。

 

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 int len,cnt=0;
 7 void f(string s)
 8 {
 9     ++cnt;
10     len = s.size();
11     if(len==0)
12         return;
13     else
14     {
15         int t[4] = {0}, n;
16         if (s[0] >= 'A' && s[0] <= 'F')
17             n = s[0] - 55;
18         else if(s[0] >= 'a' && s[0] <= 'f')
19             n = s[0] - 87;
20         else 
21             n = s[0] - '0';
22 
23         for (int i = 3; i >= 0; --i)
24         {
25             t[i] = n % 2;
26             n = n / 2;
27         }
28         if(cnt==1)
29         {
30             int x = 0;
31             for (int i = 0; i < 4; ++i)
32             {
33                 if(t[i]!=0)
34                     ++x;
35                 if(x!=0)
36                     cout << t[i];
37             }
38         }
39         else
40         {
41             for (int i = 0; i < 4; ++i)
42                 cout << t[i];
43         }
44         s.erase(0, 1);
45         f(s);
46     }
47 }
48 
49 int main()
50 {
51     string s1;
52     cin >> s1;
53     f(s1);
54     return 0;
55 }

 

posted @ 2019-03-05 14:47  zhangjs73  阅读(633)  评论(0)    收藏  举报